Java--SMTP协议与发送邮件

SMTP协议
(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由他来控制信件的中转方式,他帮助每台计算机在发送或中转信件时找到下一个目的地。
POP3协议Post Office Protocol – Version 3即邮局协议版本3。
在这里插入图片描述

本人用的是QQ的,需要在开启POP3/SMTP服务。
设置-》账号-》POP3/SMTP服务 开启,即可得到一个授权码,代码中需要的。具体参考:
https://blog.csdn.net/chwshuang/article/details/54344317
添加maven依赖包:

<!-- 邮件 -->
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.7</version>
		</dependency>
public class EmailUtils {

	/**
	 * 邮箱服务器用户名
	 */
	private static final String USER = "******";

	/**
	 * 邮箱服务器授权码
	 */
	private static final String PASSWORD = "****";

	public static void main(String[] args) {
		sendEmail("***@qq.com", "****@ucpaas.com", "测试", "hello");
	}

	/**
	 * 发送邮件
	 * 
	 * @param fromAddress
	 *            发送者邮箱地址
	 * @param receiveAddress
	 *            接收方邮箱地址
	 * @param subject
	 *            主题
	 * @param content
	 *            内容
	 */
	private static void sendEmail(String fromAddress, String receiveAddress, String subject, String content) {
		try {
			Session session = createSession();
			Transport ts = session.getTransport();
			// 连接邮件服务器:邮箱类型,帐号,授权码代替密码(更安全)
			ts.connect("smtp.qq.com", USER, PASSWORD);
			
			// 创建邮件
			MimeMessage mimeMessage = createMineMessage(session, fromAddress, receiveAddress, subject, content);

			// 发送邮件
			ts.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
			ts.close();
		} catch (GeneralSecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchProviderException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 创建邮件
	 * 
	 * @param session
	 * @param fromAddress
	 *            发送方邮箱地址
	 * @param receiveAddress
	 *            接收方邮件地址
	 * @param subject
	 *            邮件主题
	 * @param content
	 *            邮件内容
	 * @return
	 * @throws AddressException
	 * @throws MessagingException
	 */
	private static MimeMessage createMineMessage(Session session, String fromAddress, String receiveAddress,
			String subject, String content) throws AddressException, MessagingException {
		// 创建邮件对象
		MimeMessage message = new MimeMessage(session);
		// 指明邮件的发件人
		message.setFrom(new InternetAddress(fromAddress));
		// 指明邮件的收件人,
		message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveAddress));
		// 邮件的标题
		message.setSubject(subject);
		// 邮件的文本内容
		message.setContent(content, "text/html;charset=UTF-8");
		// 返回创建好的邮件对象
		return message;
	}

	/**
	 * 创建会话
	 * 
	 * @return
	 * @throws GeneralSecurityException
	 */
	private static Session createSession() throws GeneralSecurityException {
		Properties prop = new Properties();
		// 开启debug调试,以便在控制台查看
		prop.setProperty("mail.debug", "true");
		// 设置邮件服务器主机名
		prop.setProperty("mail.host", "smtp.qq.com");
		// 发送服务器需要身份验证
		prop.setProperty("mail.smtp.auth", "true");
		// 发送邮件协议名称
		prop.setProperty("mail.transport.protocol", "smtp");

		// 开启SSL加密,否则会失败
		MailSSLSocketFactory sf = new MailSSLSocketFactory();
		sf.setTrustAllHosts(true);
		prop.put("mail.smtp.ssl.enable", "true");
		prop.put("mail.smtp.ssl.socketFactory", sf);

		// 创建session
		return Session.getInstance(prop);
	}
}

参考文章:
https://www.cnblogs.com/xyzq/p/5704358.html
遇到的问题:
1 RSA premaster secret error: SunTls12RsaPremasterSecret KeyGenerator not available
原因:jdk中jar包有问题,
解决方案:https://my.oschina.net/weiweiblog/blog/1615166

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值