1.下载所需要的jar
下载activation.jar mail.jar
链接:https://pan.baidu.com/s/1WcnyPbH7fyhOlP-SdJwssg 密码:yo2i
maven 依赖
<!-- email --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dependency>
2.工具类
package com.syiaas.util;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class EmailUtil {
public static void main(String[] args) {
// 收件人电子邮箱
String[] to = {"xxxx@qq.com","xxxx@xxx.com"};
// 发件人电子邮箱
String from = "xxxxx@qq.com";
// 指定发送邮件的主机为 smtp.qq.com
String host = "smtp.qq.com"; //QQ 邮件服务器
String username = "xxxxx@qq.com";//发件人邮件用户名、授权码
String password = "xxxxxxx";
String subject = "整点数据";
StringBuilder sb = new StringBuilder();
sb.append("<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">");
// 表头
sb.append("<tr>\n" +
" <th>9:00</th>\n" +
" <th>10:00</th>\n" +
" <th>11:00</th>\n" +
" <th>12:00</th>\n" +
" <th>13:00</th>\n" +
" <th>14:00</th>\n" +
" <th>15:00</th>\n" +
" <th>16:00</th>\n" +
" <th>17:00</th>\n" +
" </tr>");
// 内容
sb.append("<tr>\n" +
" <td>90</td>\n" +
" <td>100</td>\n" +
" <td>110</td>\n" +
" <td>120</td>\n" +
" <td>130</td>\n" +
" <td>140</td>\n" +
" <td>150</td>\n" +
" <td>160</td>\n" +
" <td>170</td>\n" +
" </tr>");
sb.append("</table>");
sendHTMLMessage(username,password,to,from,host,subject,sb.toString());
//支持文本发送
//String text = "This is actual message";
//sendTextMessage(username,password,to,from,host,subject,text);
//支持附件发送
// List<String> paths = new ArrayList<>();
// paths.add("/jxl_test.xlsx");
// paths.add("/merge.xls");
// sendAttachmentMessage(username,password,to,from,host,subject,text,paths);
}
/**
* @Description: 支持发送文本内容
* @Param: [username, password, to, from, host, subject, text]
* [邮件用户名, 授权码, 收件人电子邮箱, 发件人电子邮箱, 指定发送邮件的主机, 头部头字段,消息体]
* @return: void
* @Author:
* @Date: 2019/3/27
*/
public static void sendTextMessage(final String username,final String password,String[] to,String from,String host,String subject,String text){
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress[] sendTo = new InternetAddress[to.length];
for (int i = 0; i < sendTo.length; i++) {
sendTo[i] = new InternetAddress(to[i]);
}
message.setRecipients(MimeMessage.RecipientType.TO,
sendTo);
message.setSubject(subject);
message.setText(text);
Transport.send(message);
System.out.println("Sent message successfully");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
/**
* @Description: 支持发送附件
* @Param: [username, password, to, from, host, subject, text, paths]
* [邮件用户名, 授权码, 收件人电子邮箱, 发件人电子邮箱, 指定发送邮件的主机, 头部头字段,消息体,附件的路径]
* @return: void
* @Author:
* @Date: 2019/3/27
*/
public static void sendAttachmentMessage(final String username, final String password, String[] to, String from, String host, String subject, String text, List<String> paths){
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress[] sendTo = new InternetAddress[to.length];
for (int i = 0; i < sendTo.length; i++) {
sendTo[i] = new InternetAddress(to[i]);
}
message.setRecipients(MimeMessage.RecipientType.TO,
sendTo);
message.setSubject(subject);
message.setText(text);
// 设置正文
BodyPart bp = new MimeBodyPart();
String mailBody = "请查收";
Multipart mp = new MimeMultipart();
bp.setContent(mailBody, "text/html;charset=utf-8");
mp.addBodyPart(bp);
// 设置附件
if (paths != null && paths.size() > 0) {
for(int i = 0 ; i < paths.size() ; i++) {
bp = new MimeBodyPart();
FileDataSource fds = new FileDataSource(paths.get(i));
bp.setDataHandler(new DataHandler(fds));
bp.setFileName(MimeUtility.encodeText(fds.getName(), "UTF-8", "B"));
mp.addBodyPart(bp);
}
}
message.setContent(mp);
message.saveChanges();
Transport.send(message);
System.out.println("Sent message successfully");
}catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* @Description: 支持发送HTML内容
* @Param: [username, password, to, from, host, subject, text]
* [邮件用户名, 授权码, 收件人电子邮箱, 发件人电子邮箱, 指定发送邮件的主机, 头部头字段,消息体]
* @return: void
* @Author:
* @Date: 2019/3/27
*/
public static void sendHTMLMessage(final String username,final String password,String[] to,String from,String host,String subject,String text){
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress[] sendTo = new InternetAddress[to.length];
for (int i = 0; i < sendTo.length; i++) {
sendTo[i] = new InternetAddress(to[i]);
}
message.setRecipients(MimeMessage.RecipientType.TO,
sendTo);
message.setSubject(subject);
//发送 HTML 消息, 可以插入html标签
message.setContent(text,"text/html;charset=utf8");
Transport.send(message);
System.out.println("Sent message successfully");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
3. 针对阿里云服务器,发送邮件失败,如何25端口解封步骤?
注意 登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 -生成授权码作为密码
操作步骤
- 登录云盾安全管控平台管理控制台。
说明 您可以将鼠标移至在阿里云管理控制台右上角的账户图标,单击安全管控打开云盾安全管控平台管理控制台。
- 定位到业务申请 > 25端口解封页面,单击25端口解封申请。
注意 在正式申请前,您需要确认同意并承诺,保证TCP 25端口仅用来连接第三方的SMTP服务器,从第三方的SMTP服务器外发邮件。如发现您使用申请的IP直接通过SMTP发送邮件,阿里云有权永久性封禁TCP 25端口,并不再提供解封服务。
- 选择IP类型,填写您要报备的IP及关联域名(仅能申请登录账号下所拥有的IP),单击确定。

勾选已阅读并同意《25端口使用服务协议》,单击下一步
填写申请表单,详细说明您的TCP 25端口使用描述及使用情况
单击确定,提交TCP 25端口解封申请
说明 一般情况下,在您提交解封申请一个工作日后,阿里云会根据您提交的申请理由进行审核,并将审核结果以邮件的方式通知您
若申请失败,根据提示进行修改
可以设置如下参数解决
//设置80端口
properties.put("mail.smtp.port", "80");
//修改发送方式
properties.put("mail.smtp.socketFactory", "javax.net.ssl.SSLSocketFactory");
本文详细介绍了一种在Java中发送邮件的方法,包括下载所需jar包、配置Maven依赖、实现邮件发送工具类,以及在阿里云服务器上解封25端口的步骤,确保邮件发送功能的正常运行。




530

被折叠的 条评论
为什么被折叠?



