나는 등록 된 메일 id.i로 이메일을 보내기 위해 원시 안드로이드 응용 프로그램을 개발 중입니다. 어떤 클라이언트도 메일을 보내지 않으려면 직접 메일을 보냅니다. 일단 사용자가 메일 보내기 버튼을 클릭하면 내 레이아웃 설계 감사Acknowledgement 이메일
안드로이드 https://code.google.com/p/javamail-android/ 에 대한 위의 다운로드 mail.jar와 activation.jar을위한
0
A
답변
0
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.URLName;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.util.ByteArrayDataSource;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import com.sun.mail.smtp.SMTPTransport;
import com.sun.mail.util.BASE64EncoderStream;
public class GMailSender {
private Session session;
private String token;
public String getToken() {
return token;
}
public GMailSender(Activity ctx) {
super();
initToken(ctx);
}
public void initToken(Activity ctx) {
AccountManager am = AccountManager.get(ctx);
Account[] accounts = am.getAccountsByType("com.google");
for (Account account : accounts) {
Log.d("getToken", "account="+account);
}
Account me = accounts[0]; //You need to get a google account on the device, it changes if you have more than one
am.getAuthToken(me, "oauth2:https://mail.google.com/", null, ctx, new AccountManagerCallback<Bundle>(){
@Override
public void run(AccountManagerFuture<Bundle> result){
try{
Bundle bundle = result.getResult();
token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
Log.d("initToken callback", "token="+token);
} catch (Exception e){
Log.d("test", e.getMessage());
}
}
}, null);
Log.d("getToken", "token="+token);
}
public SMTPTransport connectToSmtp(String host, int port, String userEmail,
String oauthToken, boolean debug) throws Exception {
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.starttls.required", "true");
props.put("mail.smtp.sasl.enable", "false");
session = Session.getInstance(props);
session.setDebug(debug);
final URLName unusedUrlName = null;
SMTPTransport transport = new SMTPTransport(session, unusedUrlName);
// If the password is non-null, SMTP tries to do AUTH LOGIN.
final String emptyPassword = null;
/* enable if you use this code on an Activity (just for test) or use the AsyncTask
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
*/
transport.connect(host, port, userEmail, emptyPassword);
byte[] response = String.format("user=%s\1auth=Bearer %s\1\1",
userEmail, oauthToken).getBytes();
response = BASE64EncoderStream.encode(response);
transport.issueCommand("AUTH XOAUTH2 " + new String(response), 235);
return transport;
}
public synchronized void sendMail(String subject, String body, String user,
String oauthToken, String recipients) {
try {
SMTPTransport smtpTransport = connectToSmtp("smtp.gmail.com", 587,
user, oauthToken, true);
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(
body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(user));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(recipients));
smtpTransport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
Log.d("test", e.getMessage(), e);
}
}
}
또는 시도 이러한 링크 : http://nilvec.com/sending-email-without-user-interaction-in-android/ Javamail api in android using XOauth http://google-mail-xoauth-tools.googlecode.com/svn/trunk/java/com/google/code/samples/xoauth/XoauthAuthenticator.java
+0
yea 나는 이것을 시도했으나 메일 클라이언트를 보낼 것인가?하지만 클라이언트없이 직접 보낼 수 있습니까? –
+0
이 코드를 사용해보십시오. 작동 중입니다 .. – Rahul
당신은 서버 측에서해야합니다. 보안상의 이유로 적어도 보내기 버튼을 요구할 것입니다. 당신이 실용적으로 할 수있는 것들, 즉 수령인과 몸. – Rahul
@Rahul : 고맙습니다, 샘플 코드 또는 코드가 –
인데 고맙습니다. Intent email = new Intent (Intent.ACTION_SEND); \t email.putExtra (Intent.EXTRA_EMAIL, new String [] { "[email protected]"}); \t \t \t email.putExtra (Intent.EXTRA_SUBJECT, "subject"); \t email.putExtra (Intent.EXTRA_TEXT, "message"); \t email.setType ("message/rfc822"); \t startActivity (Intent.createChooser (전자 메일, "전자 메일 클라이언트 선택 :")); – Rahul