欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用Java发送邮件的实现代码

程序员文章站 2024-03-13 11:05:09
前言 大家请注意:以下代码使用的测试邮箱为126的邮箱,实测可用,注意,个人测试时,注意发送的邮件内容,邮件内容邮箱服务器审查较严格,少有不慎就会被判定为垃圾邮件,进而就...

前言

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

实例代码

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的错误码代表的意思。这种情况一般就是被判定为垃圾邮件了。

其次,测试时不要频繁运行(发送)上述代码中的邮件,太频繁了,也容易判定为垃圾邮件。好了,以上就是这篇文章的全部内容了,希望对大家的学习和工作能有所帮助。