Java 发送邮件简单实现

一、引入POM文件

<dependency>
	<groupId>javax.mail</groupId>
	<artifactId>mail</artifactId>
	<version>1.4.7</version>
</dependency>

二、Java实现

public class FirstMail {
	public static void main(String[] args) throws AddressException, MessagingException {
		Long start = System.currentTimeMillis();
		
		// 设置属性
		Properties props = new Properties();
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.transport.protocol", "smtp");
        // 用SMTP协议发送Email时通常要设置mail.smtp.host(mail.protocol.host协议特定邮件服务器名)属性
        props.put("mail.smtp.host","smtp.163.com");// smtp服务器地址
        
        // javax.mail.Session保存邮件系统的配置属性和提供用户验证的信息,发送email首先要获取session对象
        // 		Session.getInstance(java.util.Properties)获取非共享的session对象
        // 		Session.getDefaultInstance(java.utilProperties)获取共享的session对象
        Session session = Session.getInstance(props);
        session.setDebug(true);
        
        // 配置邮件会话之后,要编写消息
        // 		要编写消息就要生成javax.mail.Message子类的实例
        //		或对Internet邮件使用javax.mail.interet.MimeMessage类
        Message msg = new MimeMessage(session);
        
        // 消息发送者、日期、主题 
        msg.setSubject("第一封测试邮件");
        msg.setText("你好!这是一封测试邮件");
        msg.setSentDate(new Date());
        
        // 设置消息的接受者与发送者(寻址接收)
        msg.setFrom(new InternetAddress("[email protected]"));//发件人邮箱(我的163邮箱)
        msg.setRecipient(Message.RecipientType.TO,
                new InternetAddress("[email protected]")); //收件人邮箱(我的QQ邮箱)
        msg.saveChanges();

        // 发送Email,这里以文本消息为例 javax.mail.Transport类来发送消息。
        //		这时Transport对象与相应传输协议通信,这里是SMTP协议
        Transport transport = session.getTransport();
        
        // 登录邮箱 。配置发件人邮箱,密码或授权码
        transport.connect("[email protected]","xxxxxx");
        //发送邮件
        transport.sendMessage(msg, msg.getAllRecipients());
        
        System.out.println("邮件发送成功...");
        transport.close();
        System.out.println("发送一封邮件耗时:"+(System.currentTimeMillis()-start)+"ms");
	}
}

三、日志输出

DEBUG: setDebug: JavaMail version 1.4.7
DEBUG: getProvider() returning 
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.163.com", port 25, isSSL false
220 163.com Anti-spam GT for Coremail System (163com[20141201])
DEBUG SMTP: connected to host "smtp.163.com", port: 25

EHLO ZV7PFJKWMI36W1H
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 
1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrwCj_RUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "coremail", arg 
"1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrwCj_RUCa0xDrUUUUj"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<[email protected]>
250 Mail OK
RCPT TO:<[email protected]>
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   [email protected]
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Mon, 30 Jul 2018 17:32:18 +0800 (CST)
From: [email protected]
To: [email protected]
Message-ID: <317574433.0.1532943138175.JavaMail.Administrator@ZV7PFJKWMI36W1H>
Subject: =?UTF-8?B?56ys5LiA5bCB5rWL6K+V6YKu5Lu2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

5L2g5aW9Iei/meaYr+S4gOWwgea1i+ivlemCruS7tg==
.
250 Mail OK queued as smtp7,C8CowAB3qzUi215bTjm6LQ--.18449S2 1532943148
邮件发送成功...
QUIT
221 Bye
发送一封邮件耗时:9685ms

四、总结

        java的邮件分发还有其他类型,这里是最简单的文本类型,但是原理都差不多。可以看到这里发送一次邮件的时间还是比较长的,我们真正在项目中的实现肯定是要使用多线程的方式。

猜你喜欢

转载自blog.csdn.net/u014209205/article/details/81288985
今日推荐