利用Java发送邮件的实现代码
前言
大家请注意:以下代码使用的测试邮箱为126的邮箱,实测可用,注意,个人测试时,注意发送的邮件内容,邮件内容邮箱服务器审查较严格,少有不慎就会被判定为垃圾邮件,进而就会给你返回一个错误码:
实例代码
importjava.util.Date;
importjava.util.Properties;
importjavax.mail.Authenticator;
importjavax.mail.Message;
importjavax.mail.PasswordAuthentication;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importjavax.mail.internet.MimeUtility;
publicclassSendMailUtil{
privatestaticfinalStringUSERNAME="用户名";//发送人的用户名
privatestaticfinalStringPASSWORD="密码";//发送邮件人的密码
privatestaticfinalStringHOSTNAME="smtp.126.com";//smtp服务器地址
privatestaticfinalStringFROMADDRESS=USERNAME+"@126.com";//发件人邮箱
privatestaticfinalStringFROMUSERNAME="CNCD-码上中国博客";//发件人姓名,可随意写
privatestaticfinalStringEMAILTITLE="码上中国博客";//邮件标题
privatestaticfinalStringEMAILCONTENT="欢迎使用CNCD-码上中国博客激活邮件,请点击右侧链接完成账号激活:\n";//邮件内容
publicstaticvoidmain(String[]args){
try{
sendEmail("825338623@qq.com","用户名:guopengfei,密码:guopengfei");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*发送邮件
*@paramsendAddress要发送的邮箱地址
*@paramcontent发送的内容
*@throwsException
*/
publicstaticvoidsendEmail(StringsendAddress,Stringcontent)
throwsException{
//创建一个连接属性。
Propertiesprops=newProperties();//
props.put("mail.smtp.host",HOSTNAME);//设置smtp的服务器地址是smtp.126.com
props.put("mail.smtp.auth","true");//设置smtp服务器要身份验证。
props.put("mail.transport.protocol","stmp");
Sessionsession=Session.getInstance(props,newAuthenticator(){
protectedPasswordAuthenticationgetPasswordAuthentication(){
returnnewPasswordAuthentication(USERNAME,PASSWORD);
}
});
Messagemessage=newMimeMessage(session);
InternetAddressfrom=newInternetAddress(FROMADDRESS);//发送人地址
from.setPersonal(MimeUtility.encodeText(FROMUSERNAME));//发件人名
message.setFrom(from);
//InternetAddressto=newInternetAddress("taozhida11@sina.cn");
////收件人地址
//创建邮件体:
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(sendAddress));//抄送给多个人的邮箱
//message.setRecipient(Message.RecipientType.TO,to);//只有抄送给自己的邮箱
message.setSubject(MimeUtility.encodeText(EMAILTITLE));//邮件标题
message.setSentDate(newDate());
MimeMultipartmsgMultipart=newMimeMultipart("mixed");//指定为混合关系
message.setContent(msgMultipart);
//邮件内容
MimeBodyParthtmlPart=newMimeBodyPart();
htmlPart.setContent(
"<body><divstyle='width:1000px;height:300px;margin:0pxauto;margin-bottom:20px;border:1pxsolid#92B0DD;background-color:#FFFFFf;'><h3>这是系统自动发送的邮件,请勿回复!</h3><br/>"+
content+"</div></body>",
"text/html;charset=UTF-8");
//TODO组装的顺序非常重要,一定要先组装文本域,再组装文件
msgMultipart.addBodyPart(htmlPart);
//组装附件
//MimeBodyPartfile=newMimeBodyPart();
//FileDataSourcefile_datasource=newFileDataSource(
//"D:\\report_data2.txt");
//DataHandlerdh=newDataHandler(file_datasource);
//file.setDataHandler(dh);
////附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
//file.setFileName(MimeUtility.encodeText(dh.getName()));
//msgMultipart.addBodyPart(file);
message.saveChanges();
//发送邮件的过程:95188
Transporttransport=session.getTransport("smtp");//创建连接
transport.connect(HOSTNAME,25,USERNAME,PASSWORD);//连接服务器
//服务名,端口,发送邮件用户名
//(不要@后面),密码
transport.sendMessage(message,message.getAllRecipients());//发送信息
transport.close();//关闭
System.out.println("发送完毕");
}
}
注意,首次使用本代码的朋友们,建议除了用户名和密码换成自己的,其余的最好先不要改,否则很容易被网易邮箱判定为垃圾邮件而不给发送,一般判定为垃圾邮件时,网易返回的错误码如下:
com.sun.mail.smtp.SMTPSendFailedException:554DT:SPM126smtp2,DMmowACXoTzMk8VXVdKnEA--.1778S21472566222,pleaseseehttp://mail.163.com/help/help_spam_16.htm?ip=117.114.147.13&hostid=smtp2&time=1472566222 atcom.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829) atcom.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1634) atcom.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:889) atSendMailUtil.sendEmail(SendMailUtil.java:88) atSendMailUtil.main(SendMailUtil.java:29)
意思是说,让你前往错误返回码中的链接里查看帮助信息,你可以进入链接,发现,就有上述554的错误码代表的意思。这种情况一般就是被判定为垃圾邮件了。
其次,测试时不要频繁运行(发送)上述代码中的邮件,太频繁了,也容易判定为垃圾邮件。好了,以上就是这篇文章的全部内容了,希望对大家的学习和工作能有所帮助。