使用javamail组件发送邮件

1)Session类:该类用于创建一个和邮箱服务器的连接和验证登录

2)MimeMessage类:该类代表一封邮件(收件人,发件人,主题,正文)

3)Traspoart类:发送邮件

运行前提:发送的那个邮箱得开启pop3/smtp服务,本人第一次没有开启,报错javax.mail.AuthenticationFailedException,查阅http://blog.csdn.net/zouxucong/article/details/60578824

import java.util.Properties;

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

/**
 * 第一个javamail发送邮件的案例
 * 
 * @author APPle
 *
 */
public class TestMail {

	public static void main(String[] args) throws Exception{

		// 1)创建一个Session对象,连接和登录服务器
		/**
		 * 参数一: 本次连接的配置。 参数二: 返回对用户名和密码base64加密的对象
		 */
		Properties props = new Properties();
		// 1.1连接的发邮件的服务器地址
		props.setProperty("mail.host", "smtp.163.com");
		// 1.2 指定进行验证登录
		props.setProperty("mail.smtp.auth", "true");

		Session session = Session.getDefaultInstance(props, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(" 邮箱账号 ", " 邮箱密码 ");
			}
		});
		// 打开调用
		session.setDebug(true);

		// 2)在本次连接上, 创建一封邮件
		MimeMessage mail = new MimeMessage(session);

		// 3)设置邮件内容
		/// 3.1 设置发件人
		mail.setFrom(new InternetAddress(" 与上面的邮箱账号一样 "));

		// 3.2 设置收件人
		/**
		 * 参数一: 发送方法 发送: TO A->B 抄送: CC A->B C 密送: BCC A->B C 参数二: 发送的地址
		 */
		mail.setRecipient(RecipientType.TO, new InternetAddress(" 邮箱目的地址 "));

		// 3.3 设置主题
		mail.setSubject("这是一封javamail的测试邮件");

		// 3.4 设置内容
		/**
		 * 参数二: 邮件的内容格式。如 普通文本,html方式
		 */
		mail.setContent("这是邮件的正文内容", "text/plain;charset=utf-8"); // 可以写一些HTML语言

		// 4)发送邮件
		Transport.send(mail);

	}

}

运行结果:

DEBUG: setDebug: JavaMail version 1.5.0
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
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 LAPTOP-V7JF80R6
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UF2ZoxQUCa0xDrUUUUj
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 "1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UF2ZoxQUCa0xDrUUUUj"
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:<邮件来源>
250 Mail OK
RCPT TO:<邮件目的地>
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   邮件目的地
DATA
354 End data with <CR><LF>.<CR><LF>
From: 邮件来源
To: 邮件目的地
Message-ID: <这个不知道@smtp.163.com>
Subject: =?GBK?B?1eLKx9K7t+JqYXZhbWFpbLXEsuLK1NPKvP4=?=
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: base64

6L+Z5piv6YKu5Lu255qE5q2j5paH5YaF5a65
.
250 Mail OK queued as smtp4,DtGowABXr+OZ3LBagFzyAQ--.11124S2 1521540249
QUIT
221 Bye

补充:

带有附件的邮件:

原理图:


                /**
		 * 内容包含附件
		 */
		//一个附件对象
		//1)创建一个MimeBodyPart对象
		File file = new File(" 文件url");
		MimeBodyPart part  = new MimeBodyPart();
		DataSource source = new FileDataSource(file);
		DataHandler handler = new DataHandler(source);
		part.setDataHandler(handler);
		//设置文件名,并设置中文编码
		part.setFileName(  MimeUtility.encodeText(file.getName())  );
		
		File file2 = new File(" 文件url");
		MimeBodyPart part2  = new MimeBodyPart();
		DataSource source2 = new FileDataSource(file2);
		DataHandler handler2 = new DataHandler(source2);
		part2.setDataHandler(handler2);
		//设置文件名,并设置中文编码
		part2.setFileName(  MimeUtility.encodeText(file2.getName())  );
		
		//该对象用于封装多个附件对象
		//把MimeBodyPart对象放入MimeMultipart
		MimeMultipart multipart = new MimeMultipart();
		//添加一个附件
		multipart.addBodyPart(part);
		multipart.addBodyPart(part2);
		
		//把MimeMultipart对象放入MimeMessage
		mail.setContent(multipart);

猜你喜欢

转载自blog.csdn.net/m0_37461645/article/details/79628951