文档章节

JAVA发送邮件代码

码上中国博客
 码上中国博客
发布于 2016/08/30 22:20
字数 895
阅读 396
收藏 6

以下代码使用的测试邮箱为126的邮箱,实测可用,注意,个人测试时,注意发送的邮件内容,邮件内容邮箱服务器审查较严格,少有不慎就会被判定为垃圾邮件,进而就会给你返回一个错误码;

注意:使用本代码前请首先导入javamail.jar。



import java.util.Date;
import java.util.Properties;

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.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class SendMailUtil {

	private static final String USERNAME = "用户名"; // 发送人的用户名
	private static final String PASSWORD = "密码"; // 发送邮件人的密码
	private static final String HOSTNAME = "smtp.126.com"; // smtp服务器地址
	private static final String FROMADDRESS = USERNAME + "@126.com"; // 发件人邮箱
	private static final String FROMUSERNAME = "CNCD-码上中国博客"; // 发件人姓名,可随意写
	private static final String EMAILTITLE = "码上中国博客"; // 邮件标题
	private static final String EMAILCONTENT = "欢迎使用  CNCD-码上中国博客激活邮件 ,请点击右侧链接完成账号激活:\n";// 邮件内容

	public static void main(String[] args) {
		try {
			sendEmail("825338623@qq.com", "用户名:guopengfei,密码:guopengfei");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 发送邮件
	 * @param sendAddress  要发送的邮箱地址
	 * @param content  发送的内容
	 * @throws Exception
	 */
	public static void sendEmail(String sendAddress, String content)
			throws Exception {

		// 创建一个连接属性。
		Properties props = new Properties(); //
		props.put("mail.smtp.host ", HOSTNAME); // 设置smtp的服务器地址是smtp.126.com
		props.put("mail.smtp.auth", "true"); // 设置smtp服务器要身份验证。
		props.put("mail.transport.protocol", "stmp");
		Session session = Session.getInstance(props, new Authenticator() {
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(USERNAME, PASSWORD);
			}
		});
		Message message = new MimeMessage(session);
		InternetAddress from = new InternetAddress(FROMADDRESS); // 发送人地址
		from.setPersonal(MimeUtility.encodeText(FROMUSERNAME)); // 发件人名
		message.setFrom(from);
		// InternetAddress to = new InternetAddress("taozhida11@sina.cn");
		// //收件人地址

		// 创建邮件体:
		message.setRecipients(Message.RecipientType.TO,
				InternetAddress.parse(sendAddress));// 抄送给多个人的邮箱
		// message.setRecipient(Message.RecipientType.TO, to); // 只有抄送给自己的邮箱
		message.setSubject(MimeUtility.encodeText(EMAILTITLE)); // 邮件标题
		message.setSentDate(new Date());
		MimeMultipart msgMultipart = new MimeMultipart("mixed");// 指定为混合关系
		message.setContent(msgMultipart);
		// 邮件内容
		MimeBodyPart htmlPart = new MimeBodyPart();
		htmlPart.setContent(
				"<body><div style='width: 1000px;height: 300px;margin: 0px auto;margin-bottom:20px;border:1px solid #92B0DD;background-color: #FFFFFf;'><h3>这是系统自动发送的邮件,请勿回复!</h3><br/>"+
		content+"</div></body>",
				"text/html;charset=UTF-8");
		// TODO 组装的顺序非常重要,一定要先组装文本域,再组装文件
		msgMultipart.addBodyPart(htmlPart);
		// 组装附件
		// MimeBodyPart file = new MimeBodyPart();
		// FileDataSource file_datasource = new FileDataSource(
		// "D:\\report_data2.txt");
		// DataHandler dh = new DataHandler(file_datasource);
		// file.setDataHandler(dh);
		// // 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
		// file.setFileName(MimeUtility.encodeText(dh.getName()));
		// msgMultipart.addBodyPart(file);
		message.saveChanges();

		// 发送邮件的过程:95188
		Transport transport = session.getTransport("smtp"); // 创建连接
		transport.connect(HOSTNAME, 25, USERNAME, PASSWORD); // 连接服务器
																// 服务名,端口,发送邮件用户名
																// (不要@后面),密码
		transport.sendMessage(message, message.getAllRecipients()); // 发送信息
		transport.close(); // 关闭
		System.out.println("发送完毕");

	}
}

注意,首次使用本代码的朋友们,建议除了用户名和密码换成自己的,其余的最好先不要改,否则很容易被网易邮箱判定为垃圾邮件而不给发送,一般判定为垃圾邮件时,网易返回的错误码如下:

com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp2,DMmowACXoTzMk8VXVdKnEA--.1778S2 1472566222,please see http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.13&hostid=smtp2&time=1472566222

	at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829)
	at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1634)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:889)
	at SendMailUtil.sendEmail(SendMailUtil.java:88)
	at SendMailUtil.main(SendMailUtil.java:29)

意思是说,让你前往错误返回码中的链接里查看帮助信息,你可以进入链接,发现,就有上述554的错误码代表的意思。这种情况一般就是被判定为垃圾邮件了。

其次,测试时不要频繁运行(发送)上述代码中的邮件,太频繁了,也容易判定为垃圾邮件。

© 著作权归作者所有

码上中国博客

码上中国博客

粉丝 53
博文 75
码字总数 71198
作品 1
北京
后端工程师
私信 提问
[手记]使用java Mail发送邮件.

因为项目中要用到这个功能,写出来了.所以和大家分享一下.首先,完成javamail发送电子邮件,需要到oracle网站上下载javamail的jar包:地址为:http://www.oracle.com/technetwork/java/javamail...

被风遗忘
2012/05/06
0
0
commons-email发邮件

记得曾经学习用javamail发邮件,学了2天,大概搞明白了利用javamail发邮件的方法和注意事项。 这周末在网上闲逛时,发现了另外一个发邮件的好东东。 commons-email-1.1.jar: 这是Apache组织下...

enzozhong
2013/02/14
0
0
Java 发送邮件实现(JavaMail 和 Spring 实现)

Java 实现邮件的发送,使用 JavaMail 和 Spring 实现 一、使用 JavaMail JavaMail 是 Java 处理电子邮件相关的编程接口,但是没有被加在标准的Java开发工具包中(Java Development Kit),所...

非摩尔根
01/17
0
0
Java调用python脚本

我用python写了一个发送邮件的函数,有木有知道怎么用java调用此函数的,并且要用java来吧参数传递给python的函数。。。邮件接收人,抄送者,邮件内容均由java提供给python,小弟在这里谢谢大...

Tommy_Qin
2012/06/11
9K
6
Spring Cloud 2.x系列之springboot发送邮件

虽然现在短信验证已经最流行也是最常用的验证方式;但是邮件验证还是必不可少,依然是网站的必备功能之一。什么注册验证,忘记密码或者是给用户发送营销信息都是可以使用邮件发送功能的。最早...

技术小能手
2018/10/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Webpack打包优化:使用外链与拆包模式

一、发现问题 这是一个基于 vue-cli 的管理后台项目,由于依赖较多,打包结果如下 二、查找原因 为什么 vendor 体积这么大? 引用的库太多时,vendor的体积会很大,借助 Webpack 的分析工具,...

AI考拉
41分钟前
2
0
MSSQL-最佳实践-Always Encrypted

author: 风移 摘要 在SQL Server安全系列专题月报分享中,往期我们已经陆续分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥实现SQL Server列加密、使用混合密钥实现SQL S...

阿里云云栖社区
43分钟前
9
0
ES 集群上,业务单点如何优化升级?

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! ES 基础 ES 集群 ES 集群上业务优化 一、ES 基础 ES 的安装下载,网上一大片,我这...

泥瓦匠BYSocket
58分钟前
8
0
input accept属性限制文件上传格式

上传文件的类型;具体做法如下所示: 注意:accept属性可以限制上传格式,其有兼容性如下 《1》上传.csv格式的 <input text="file" accept=".csv" /> 《2》上传.xls格式 <input text="file"......

Jack088
今天
3
0
使用scp命令在多个Linux系统间进行文件复制

一,什么是scp scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。scp命令可以在linux服务器之间复制文件和目录.scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远...

老孟的Linux私房菜
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部