Java Mail最基本的发送邮件例子

    首先需要导入jar包,mail-1.4.2.jar,然后给出最简单的java mail发送邮件的代码,SimpleSendMailDemo.java

SimpleSendMailDemo.java

package com.steven.mail;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 最基本的邮件发送代码
 * 
 * @author Steven
 * 
 */
public class SimpleSendMailDemo {
	public static void main(String[] args) throws Exception {
		// 创建邮件的发送过程中用到的主机和端口号的属性文件
		Properties pro = new Properties();
		// 设置邮件发送方的主机地址如果是163邮箱,则为smtp.163.com
		// 如果是其他的邮箱可以参照http://wenku.baidu.com/link?url=Cf-1ggeW3e7Rm9KWfz47UL7vvkRpPxAKBlYoTSGpnK4hxpJDiQ0A4lRoPDncMlcMIvUpEn6PD0aObgm5zJaM7AOGkRdccSx6HDH2fSWkxIq这个文档
		pro.put("mail.smtp.host", "smtp.qq.com");
		// 设置发送邮件端口号
		pro.put("mail.smtp.port", "25");
		// 设置邮件发送需要认证
		pro.put("mail.smtp.auth", "true");
		// 创建邮件验证信息,即发送邮件的用户名和密码
		Authenticator authenticator = new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				// 重写验证方法,填写用户名,密码
				return new PasswordAuthentication("[email protected]", "123");
			}
		};
		// 根据邮件会话 构建一个邮件的session
		Session sendMailSession = Session
				.getDefaultInstance(pro, authenticator);
		// 创建一个邮件消息
		Message message = new MimeMessage(sendMailSession);
		// 创建邮件发送者地址
		Address sourceAddress = new InternetAddress("[email protected]");
		// 将原地址设置到消息的信息中
		message.setFrom(sourceAddress);
		// 创建邮件的接收者地址
		Address destAddress = new InternetAddress("[email protected]");
		// 将接收者的地址设置到消息的信息中
		message.setRecipient(Message.RecipientType.TO, destAddress);
		// 设置邮件的主题
		message.setSubject("Merry Christmas!");
		// 设置邮件的发送内容
		message.setText("你好,圣诞节快乐!");
		// 可以设置邮件的发送时间(就是对方看邮件发送的时间)
		// String sendDate = "2013-12-23 17:55:00";
		// Date date = new
		// SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(sendDate);
		// message.setSentDate(date);
		// 发送邮件
		Transport.send(message);
	}

}
    这个例子是完全没有封装后的源代码,如果进行封装的话,可以考虑将发送的邮箱信息封装成一个邮件信息的类,然后验证可以通过一个类继承Authenticator然后复写方法getPasswordAuthentication(),接着发送的主要业务逻辑可以封装成一个类,这样在使用的时候,就可以通过创建邮件信息,进行验证,通过主要的业务逻辑调用发送邮件。

    然后发送的最终效果如下图1所示:

Java Mail最基本的发送邮件例子_第1张图片

                    图1

    具体的实现封装的代码我将会放到资源中,有需要的话可以进行下载。

    注意:

    在进行gmail邮件测试时候,有可能会发生以下的异常

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. tu3sm19118788pab.1 - gsmtp

    这是因为google的Java Mail开发跟其他的不太相同,需要SSL安全验证,还有其SMTP服务器的端口也不一样,需要是465端口

    解决思路

    只要在properties中增加以下的属性,即可解决以上的问题

// 如果设置,指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字。
pro.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
// 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类。默认值为true。
pro.setProperty("mail.smtp.socketFactory.fallback", "false");
// 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口。
pro.setProperty("mail.smtp.socketFactory.port", "465");
           当然如果是gmail,发邮件的时候,还需要对原有的配置做如下更改

// 设置发送邮件服务器为gmail
pro.put("mail.smtp.host", "smtp.gmail.com");
// 设置发送邮件端口号
pro.put("mail.smtp.port", "465");

    这个时候,就可以解决以上问题,成功发送gmail邮件了。。。

    在此恭祝大家学习愉快,圣诞节快乐!

你可能感兴趣的:(java,邮件,Gmail,mail,Authenticator)