新年快乐!
我正在开发一个应用程序,用户只要发生特定触发器就会收到电子邮件.
public static void sendEmail(String host,String port,String useSSL,String useTLS,String useAuth,String user,String password,String subject,String content,String type,String recipients)
throws NoSuchProviderException,AddressException,MessagingException {
final Properties props = new Properties();
props.setProperty("mail.transport.protocol","smtp");
props.setProperty("mail.smtp.host",host);
props.setProperty("mail.smtp.port",port);
if (useSSL != null && !useSSL.equals("false") && useSSL.equals("true")) {
props.setProperty("mail.smtp.ssl.enable",useSSL);
props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.port",port);
}
if (useTLS != null && !useTLS.equals("false") && useTLS.equals("true")) {
props.setProperty("mail.smtp.starttls.enable",useTLS);
props.setProperty("mail.smtp.socketFactory.fallback","true");
}
props.setProperty("mail.smtp.auth",useAuth);
props.setProperty("mail.from",user);
props.setProperty("mail.smtp.user",user);
props.setProperty("mail.password",password);
Session mailSession = Session.getDefaultInstance(props,new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(props.getProperty("mail.smtp.user"),props
.getProperty("mail.password"));
}
});
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession);
message.setHeader("Subject",subject);
message.setContent(content,type);
StringTokenizer tokenizer = new StringTokenizer(recipients,";");
while (tokenizer.hasMoreTokens()) {
String recipient = tokenizer.nextToken();
message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipient));
}
transport.connect();
transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
transport.close();
奇怪的是,每当我尝试使用main方法运行上述代码时,它都会成功发送SSL和TLS协议的电子邮件.
public static void main(String args[])
{
try {
Notifier.sendEmail("smtp.gmail.com","587","false","true","sender_email@gmail.com","testpassword","CHECKING SETTINGS","CHECKING EMAIL FUNCTIONALITY","text/html","cc_email@gmail.com");
} catch (Exception ex) {
ex.printStackTrace();
}
}
但每当我尝试通过我的Web应用程序运行相同的代码时它就会失败.
通过SSL发送它会引发此错误:
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication required. Learn more at
jvm 1 | 530 5.5.1 https://support.google.com/mail/answer/14257 f12sm88286300pat.20 - gsmtp
jvm 1 |
jvm 1 | at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
通过TLS发送会抛出此错误:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com,port: 587;
jvm 1 | nested exception is:
jvm 1 | javax.net.ssl.SSLException: Unrecognized SSL message,plaintext connection?
jvm 1 | at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
任何形式的帮助表示赞赏.
EDIT1:
这是前端的tpl文件
dio" name="sslEnable" value="$SSLENABLE$">
Enable SSL?
dio" name="tlsEnable" value="$TLSENABLE$">
Enable TLS?