JavaMail实现邮箱之间发送邮件功能
package com.minstone.message.util; import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.springframework.stereotype.Component; @Component public class SendmailUtil { // 设置服务器 private static String KEY_SMTP = "mail.smtp.host"; // private static String VALUE_SMTP = "smtp.163.com"; // private static String VALUE_SMTP = "smtp.qq.com"; // private static String VALUE_SMTP = "smtp.exmail.qq.com"; private static String VALUE_SMTP = "smtp.sina.com.cn"; // 服务器验证 private static String KEY_PROPS = "mail.smtp.auth"; private static boolean VALUE_PROPS = true; // 发件人用户名、密码 // private String SEND_USER = "abc25660663"; // private String SEND_USER = "1481596361"; // private String SEND_USER = "hongxy"; private String SEND_USER = "mingdong123abc"; //发件人邮箱 // private String FROMADDRESS=SEND_USER+"@163.com"; // private String FROMADDRESS=SEND_USER+"@qq.com"; // private String FROMADDRESS=SEND_USER+"@minstone.com.cn"; private String FROMADDRESS=SEND_USER+"@sina.com"; private String SEND_UNAME = "政务服务中心"; //邮箱密码 // private String SEND_PWD = "25660663abc."; // private String SEND_PWD = "313131abc."; // private String SEND_PWD = "25660663Abc."; private String SEND_PWD = "mingdong123abc"; // 建立会话 private MimeMessage message; private Session s; /* * 初始化方法 */ public SendmailUtil() { Properties props = System.getProperties(); // 连接协议 props.put("mail.transport.protocol", "smtp"); props.put(KEY_SMTP, VALUE_SMTP); props.put(KEY_PROPS, "true");//true一定要加双引号 props.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用 props.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息 s = Session.getDefaultInstance(props, new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(SEND_UNAME, SEND_PWD); }}); s.setDebug(true); message = new MimeMessage(s); } /** * 发送邮件 * * @param headName * 邮件头文件名 * @param sendHtml * 邮件内容 * @param receiveUser * 收件人地址 */ public void doSendHtmlEmail(String headName, String sendHtml, String receiveUser){ try { // 发件人 InternetAddress from = new InternetAddress(FROMADDRESS);//发送人地址 message.setFrom(from); // 收件人 InternetAddress to = new InternetAddress(receiveUser); message.setRecipient(Message.RecipientType.TO, to); // 邮件标题 message.setSubject(headName); String content = sendHtml.toString(); // 邮件内容,也可以使纯文本"text/plain" message.setContent(content, "text/html;charset=UTF-8"); message.setSentDate(new Date()); message.saveChanges(); Transport transport = s.getTransport("smtp"); //这种方式应用于163网易邮箱和QQ邮箱,最后一个参数是授权码,网易的授权码可以自动设置,而QQ邮箱的授权码需通过短信才可收到 // transport.connect(FROMADDRESS,"25660663abc"); // transport.connect(FROMADDRESS,"yigoehcqlbxkhfid"); //QQ企业邮箱,新浪邮箱,由于企业QQ邮箱和新浪邮箱开通POP3/SMTP/IMAP服务时,不需要授权码 transport.connect(VALUE_SMTP, FROMADDRESS, SEND_PWD); // 发送 transport.sendMessage(message, message.getAllRecipients()); transport.close(); System.out.println("send success!"); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } public static void main(String[] args) { SendmailUtil se = new SendmailUtil(); se.doSendHtmlEmail("邮件标题1111", "邮件内容", "1481596361@qq.com"); } }
以上例子是JavaMail实现邮箱之间发送邮件功能,需要注意的是发送邮箱是否需要授权码,需要授权码书写的方式和不需要授权码书写的方式不一致,主要区别在
transport.connect方法的参数,而接收邮件的邮箱却不规定,任意邮箱都可以。
需要导入一些包:
![](https://images2015.cnblogs.com/blog/734784/201703/734784-20170328150443936-110697848.png)
具体根据自身的情况进行导入,一般来说mail.jar或者javax.mail.jar和activation.jar需导入
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!