JavaMail使用DEMO+getInstance AND getDefaultInstance区别

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对象。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值