import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class TestEmail2
{
public static final String SMTPSERVER = "SMTP MAIL";
public static final String SMTPPORT = "587";
public static final String ACCOUT = "***.163.com";
public static final String PWD = "*****";
private void sendEmail() throws Exception
{
Properties prop = new Properties();
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.host", SMTPSERVER);
prop.setProperty("mail.smtp.port", SMTPPORT);
// prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.setProperty("mail.smtp.starttls.enable", "true");
prop.setProperty("mail.smtp.auth", "true"); // 需要请求认证
// prop.setProperty("mail.smtp.ssl.enable", "true");// 开启ssl
prop.setProperty("mail.smtp.EnableSSL.enable","true");
prop.setProperty("mail.smtp.ssl.trust", SMTPSERVER);
// 根据邮件配置创建会话,注意session别导错包
Session session = Session.getDefaultInstance(prop); //单例
// 开启debug模式,可以看到更多详细的输入日志
session.setDebug(true); //创建邮件
MimeMessage message = createEmail(session);
//获取传输通道
Transport transport = session.getTransport();
transport.connect(SMTPSERVER,ACCOUT, PWD);//登录到SMTP
//连接,并发送邮件
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
public MimeMessage createEmail(Session session) throws Exception {
// 根据会话创建邮件
MimeMessage msg = new MimeMessage(session);
// address邮件地址, personal邮件昵称, charset编码方式
InternetAddress fromAddress = new InternetAddress(ACCOUT, "kimi", "utf-8");
// 设置发送邮件方
msg.setFrom(fromAddress);
InternetAddress receiveAddress = new InternetAddress( "idsbg-cd-cmproject@mail.foxconn.com", "test", "utf-8");
// 设置邮件接收方
msg.setRecipient(RecipientType.TO, receiveAddress);
// 设置邮件标题
msg.setSubject("测试标题", "utf-8");
msg.setText("我是个程序员,一天我坐在路边一边喝水一边苦苦检查程序。 这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱。 然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他缓缓地指着我的屏幕说,这里少了个分号");
// 设置显示的发件时间
msg.setSentDate(new Date());
// 保存设置
msg.saveChanges();
return msg;
}
public static void main(String[] args)
{
try
{
new TestEmail2().sendEmail();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
getInstance and getDefaultInstance
如果想要同时使用两个帐号发送javamail,比如
使用 1@a.com发送1#邮件,使用2@a.com发送2#邮件,就需要同时创建两个java.mail.Session对象。但如果你仍然使用Session.getDefaultInstance创建session对象的话,你会发现,第二个username:2@a.com创建的session永远都和第一个一样,这是为什么呢?因为,getDefaultInstance是真正单例模式,而且,里面的username和password属性是final型的,无法更改。所以,你会发现两封email都是由1@a.com发出来的。所以这个时候你要使用javax.mail.Session.getInstance()方法来创建session对象。