两种JavaMail发送邮件例子

第一种写法:

public static void main(String[] args) throws Exception {
		// 第一种写法:
		Properties props = new Properties();
		props.setProperty("mail.smtp.host", "smtp.163.com");
		props.setProperty("mail.debug", "true");
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		Session session = Session.getInstance(props);
		Message message = new MimeMessage(session);
		message.setFrom(new InternetAddress("[email protected]"));
		message.setText("测试邮件!请勿回复!");
		Transport transport = session.getTransport();
		transport.connect("smtp.163.com", 25, "[email protected]", "****");
		transport.sendMessage(message, new Address[] { new InternetAddress(
				"[email protected]") });
		transport.close();
    }

 

 或者

   

	public static void main(String[] args) throws Exception {
                                 Properties props = new Properties();
		 props.setProperty("mail.smtp.host", "smtp.163.com");
		 // 必须有这项设置
		 props.setProperty("mail.smtp.auth", "true");
		 props.setProperty("mail.debug", "true");

		 // Session管理与stmp的链接信息
		 Session session = Session.getDefaultInstance(props,
		 new Authenticator() {
		 protected PasswordAuthentication getPasswordAuthentication() {
		 return new PasswordAuthentication("[email protected]",
		 "*******");
		 }
		 });
		
		 MimeMessage msg = new MimeMessage(session);
		 try {
		 msg.setFrom(new InternetAddress("[email protected]"));
		 msg.addRecipients(Message.RecipientType.TO,
		 "[email protected],[email protected]");
		 msg.setSubject("测试--群发", "UTF-8");
		 msg.setSentDate(new Date());
		 msg.setText("你好,这是一封测试邮件。收到请勿回复", "UTF-8");
		
		 // 使用静态的方法发送信息
		 // Transport.send(msg,new InternetAddress[]{new
		 // InternetAddress("[email protected]")});
		 Transport.send(msg);
		 } catch (MessagingException e) {
		 e.printStackTrace();
    }		 
 }

 

其中javamail Session.getDefaultInstance和getInstance的区别:

 

    如果想要同时使用两个帐号发送javamail,比如使用[email protected]发送1#邮件,使用[email protected]发送2#邮件,这时候,你就需要同时创建两个java.mail.Session对象。但是如果你仍然使用Session.getDefaultInstance创建session对象的话,你会发现,第二个username:[email protected]创建的session永远都和第一个一样,这是为什么呢?因为,getDefaultInstance是真正单例模式,而且,里面的username和password属性是final型的,无法更改。所以,你会发现两封email都是由[email protected]发出来的。所以这个时候你要使用javax.mail.Session.getInstance()方法来创建session对象。

 

Transport 方法 send 和 sendMessage 之间有什么区别?
   send() 方法是一个静态方法,可以直接使用,而不需要 Transport 对象的实例。它用于常见、简单的场合,比如使用默认传输发送单条消息。从内部讲,send() 方法首先调用消息上的 saveChanges() 方法。然后创建合适的新 Transport 对象,调用 Transport 的 connect() 方法,调用 Transport 的 sendMessage() 方法来实际发送消息,接着调用 Transport 的 close() 方法,最后丢弃 Transport 对象的新实例,并由垃圾收集器收集(实际上,还有比那更加复杂的,但那是一般的想法)。
  如你可以看到,静态 send() 便利 (convenience) 方法是建立在更加通用的每实例 sendMessage() 方法的基础上的。有许多原因可以让应用程序直接使用 sendMessage() 方法。最常见的原因是为了通过在单个连接期间发送多条消息 来提高性能,或者为了手动治理连接以提供验证信息。当使用 sendMessage() 方法时,产生的最常见错误是,忘记在要发送的消息上调用 saveChanges() 方法。

 

 

第2种,结合spring

	public static void main(String[] args) throws AddressException, MessagingException {
		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
		mailSender.setHost("mail.xinnet.com");
		mailSender.setUsername("*****@xinnet.com");
		mailSender.setPassword("*****");
		Properties prop = new Properties();
		prop.put("mail.debug", "true");
		prop.put("mail.smtp.auth", "true");
		prop.put("mail.smtp.timeout", "25000");
		mailSender.setJavaMailProperties(prop);
		MimeMessage mailMessage = mailSender.createMimeMessage(); 
	                MimeMessageHelper mail = new MimeMessageHelper(mailMessage); 
		mail.setFrom("******@xinnet.com");
		mail.setTo("*****@xinnet.com");
		mail.setSubject(" 测试spring Mail");
		mail.setText("hello!!spring<br/> html Mail",true);
		mailSender.send(mailMessage);
		System.out.println(" 邮件发送成功.. ");
	}

 

下一篇贴一些网上找来的一些JavaMail的常见问题

 

你可能感兴趣的:(javamail)