java实现163邮箱发送邮件到qq邮箱成功案例
程序员文章站
2024-03-12 09:55:44
下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱...
下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:
package test; import java.util.arraylist; import java.util.date; import java.util.list; import java.util.properties; import java.util.regex.matcher; import java.util.regex.pattern; import javax.mail.address; import javax.mail.authenticator; import javax.mail.bodypart; 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 com.sun.mail.util.mailsslsocketfactory; ///** // * // * @author tuzongxun123 // * @description 邮件发送测试类 // */ public class sendmailtest { public static void main(string[] args) throws exception { // 配置信息 properties pro = new properties(); pro.put("mail.smtp.host", "smtp.163.com"); pro.put("mail.smtp.auth", "true"); // ssl加密 mailsslsocketfactory sf = null; sf = new mailsslsocketfactory(); // 设置信任所有的主机 sf.settrustallhosts(true); pro.put("mail.smtp.ssl.enable", "true"); pro.put("mail.smtp.ssl.socketfactory", sf); // 根据邮件的会话属性构造一个发送邮件的session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了 //还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码 mailauthenticator authenticator = new mailauthenticator("tuzongxun123", "客户端授权码"); session session = session.getinstance(pro, authenticator); // 根据session 构建邮件信息 message message = new mimemessage(session); // 创建邮件发送者地址 address from = new internetaddress("tuzongxun123@163.com"); // 设置邮件消息的发送者 message.setfrom(from); // 验证收件人邮箱地址 list<string> toaddresslist = new arraylist<>(); toaddresslist.add("1160569243@qq.com"); stringbuffer buffer = new stringbuffer(); if (!toaddresslist.isempty()) { string regex = "^([a-z0-9a-z]+[-|\\.]?)+[a-z0-9a-z]@([a-z0-9a-z]+(-[a-z0-9a-z]+)?\\.)+[a-za-z]{2,}$"; pattern p = pattern.compile(regex); for (int i = 0; i < toaddresslist.size(); i++) { matcher match = p.matcher(toaddresslist.get(i)); if (match.matches()) { buffer.append(toaddresslist.get(i)); if (i < toaddresslist.size() - 1) { buffer.append(","); } } } } string toaddress = buffer.tostring(); if (!toaddress.isempty()) { // 创建邮件的接收者地址 address[] to = internetaddress.parse(toaddress); // 设置邮件接收人地址 message.setrecipients(message.recipienttype.to, to); // 邮件主题 // message.setsubject("java邮件测试"); message.setsubject("为什么错了"); // 邮件容器 mimemultipart mimemultipart = new mimemultipart(); // 设置html bodypart bodypart = new mimebodypart(); // 邮件内容 // string htmltext = "java邮件测试111"; string htmltext = "为什么错了"; bodypart.setcontent(htmltext, "text/html;charset=utf-8"); mimemultipart.addbodypart(bodypart); // 添加附件 list<string> fileaddresslist = new arraylist<string>(); fileaddresslist .add("c:\\users\\tuzongxun123\\desktop\\新建 microsoft office word 文档.docx"); if (fileaddresslist != null) { bodypart attchpart = null; for (int i = 0; i < fileaddresslist.size(); i++) { if (!fileaddresslist.get(i).isempty()) { attchpart = new mimebodypart(); // 附件数据源 datasource source = new filedatasource( fileaddresslist.get(i)); // 将附件数据源添加到邮件体 attchpart.setdatahandler(new datahandler(source)); // 设置附件名称为原文件名 attchpart.setfilename(mimeutility.encodetext(source .getname())); mimemultipart.addbodypart(attchpart); } } } message.setcontent(mimemultipart); message.setsentdate(new date()); // 保存邮件 message.savechanges(); // 发送邮件 transport.send(message); } } } class mailauthenticator extends authenticator { /** * 用户名 */ private string username; /** * 密码 */ private string password; /** * 创建一个新的实例 mailauthenticator. * * @param username * @param password */ public mailauthenticator(string username, string password) { this.username = username; this.password = password; } public string getpassword() { return password; } @override protected passwordauthentication getpasswordauthentication() { return new passwordauthentication(username, password); } public string getusername() { return username; } public void setpassword(string password) { this.password = password; } public void setusername(string username) { this.username = username; } }
注:我有个同事使用我这个代码更换为他的账号和客户端授权码后,一运行就报错,然后重置了一下邮箱的客户端授权码后,错误便消失了。
以上就是本文的全部内容,希望对大家学习java程序设计有所帮助。