[英]Sending Mail: Authentication Failure
我正在嘗試從應用發送電子郵件,並且使用以下代碼:
private static final String username = "sth@gmail.com";
private static final String password = "pass";
private void sendMail(String email, String subject, String messageBody) {
Session session = createSessionObject();
try {
Message message = createMessage(email, subject, messageBody, session);
new SendMailTask().execute(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
private Message createMessage(String email, String subject, String messageBody, Session session) throws MessagingException, UnsupportedEncodingException {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("sth@gmail.com"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(email, email));
message.setSubject(subject);
message.setText(messageBody);
return message;
}
private Session createSessionObject() {
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
return Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
private class SendMailTask extends AsyncTask<Message, Void, Void> {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(SendQuestion.this, "Please wait", "Sending mail", true, false);
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
}
@Override
protected Void doInBackground(Message... messages) {
try {
Transport.send(messages[0]);
} catch (MessagingException e) {
e.printStackTrace();
}
return null;
}
}
Eclipse拋出javax.mail.AuthenticationFailedException。 當我第一次嘗試發送郵件時,我的gmail帳戶收到了Google發出的有關安全性的郵件,並阻止了該郵件。 然后,我在/ lesssecureapps激活,我希望允許安全性較低的應用程序。 但這並沒有解決。 我的代碼有問題嗎?還是有Gmail問題?
PS:我已經添加了所有必需的.jar並包括了Internet訪問以顯示清單
嘗試這樣做:
public static int Email(String fromemail, String toemail, String cc,
String bcc, String Subject, String Body, String Attachment) {
final String fromEmail = fromemail;// "user@gmail.com"; //requires
// valid gmail id
// final String password = Password; // correct password for gmail id
final String toEmail = toemail;// "user2@ymail.com"; // can be any
// email id
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
sf.setTrustAllHosts(true);
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); // SMTP Host
props.put("mail.smtp.socketFactory.port", "465"); // SSL Port
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory"); // SSL Factory Class
props.put("mail.smtp.auth", "true"); // Enabling SMTP Authentication
props.put("mail.smtp.port", "465"); // SMTP Port
Authenticator auth = new Authenticator() {
// override the getPasswordAuthentication method
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, Password);
}
};
Session session = Session.getDefaultInstance(props, auth);
int i;
i = sendEmail(session, toEmail, Subject, Body);
return i;
}
這是發送功能:
public static void sendEmail(Session session, String toEmail,
String subject, String body) {
try {
MimeMessage msg = new MimeMessage(session);
// set message headers
msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
msg.addHeader("format", "flowed");
msg.addHeader("Content-Transfer-Encoding", "8bit");
msg.setFrom(new InternetAddress("no_reply@journaldev.com",
"Operation Department Email"));
msg.setReplyTo(InternetAddress.parse("no_reply@journaldev.com",
false));
msg.setSubject(subject, "UTF-8");
msg.setText(body, "UTF-8");
msg.setSentDate(new Date());
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(toEmail, false));
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
事實證明,這是Google服務器的問題。 我與支持人員聯系,他們將其修復。 上面的代碼可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.