最近做一个发送邮件的功能,以前做过但年代太久代码也找不到了。而且也不想搭邮件服务器于是考虑用163的测试一下。弄一天恶心 554 DT:SPM这个异常看吐了,看了下官方的文档大概是说主题或者内容里面有些关键字不合法。百度了一下一大堆各种各样的解决方法试几个都没用。有的说网易就是故意不让你发的时好时坏。果断弃,准备自己弄邮件服务器的时候想起阿里免费的企业邮箱,弄了个一会就测通了。网易邮箱还亏这么多人用还是阿里靠谱。
package com.ssm.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
public class SendTest {
public static void main(String[] args) {
try {
sendMail("xxx@syin.xyz","*****","asddfas1","laji..");
}catch (Exception me)
{
me.printStackTrace();
}
}
public static void sendMail(String emailName,String emailPassword,String title, String centent) throws Exception {
Properties properties = new Properties();// 创建Properties对象
properties.setProperty("mail.transport.protocol", "smtp");// 设置传输协议
properties.put("mail.smtp.host", "smtp.syin.xyz");
properties.put("mail.debug", "true");//便于调试
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "465");
final String em = emailName;
final String ep = emailPassword;
Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(em,
ep);
}
};// 使用验证,创建一个Authenticator
Session session = Session.getDefaultInstance(properties, auth);// 根据Properties,Authenticator创建Session
session.setDebug(true);
Message message = new MimeMessage(session);// Message存储发送的电子邮件信息
message.setFrom(new InternetAddress("xxx@syin.xyz"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
"xxxx@163.com"));// 设置收信邮箱
// 指定邮箱内容及ContentType和编码方式
message.setContent(centent, "text/html;charset=utf-8");
message.setSubject(title);// 设置主题
message.setSentDate(new Date());// 设置发信时间
Transport.send(message);// 发送
}
}
域名是自己绑定到企业邮箱上的。SSL和普通25端口的区别就是引入SSLSocketFactory和配置好SSL对应的465端口。