在校的时候,学过JavaMail,发送简单文本内容。所以刚接手这任务的时候,觉得挺过程应该不会太难,只是要研究一下将附件一并发送。
首先要配置环境,我用的163邮箱。
然后复制客户端授权密码,在这里自己设置。
在项目测试过程中,我上网借鉴了好多,但是一直553什么的报错。
报错1:smtplib.SMTPDataError: 554, 'DT:SPM
原因:有的时候控制台也会给提示个链接,554错误的原因有很多,我的问题原因就是《发信IP因发送垃圾邮件或存在异常的连接行为,被暂时挂起》,还有就是是163邮箱的客户端授权码我写错了。
报错2:smtplib.SMTPDataError: (554, b’DT:SPM 163 smtp10,DsCowAA3nir1u6xZq42WDw–.22935S2 1504492533,please
原因:赋值不全。只赋值了msg[‘Subject‘], 沒有賦值msg[‘From‘], msg[‘To‘]。
最期待的部分,开始上代码~~~
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.*;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @Author Wangsq.
* @Description
* @Date 2019/8/20 on 10:19.
*/
public class SendMail {
public static String smtp_host = "smtp.163.com"; // 网易
public static String user = "888@163.com"; // 邮箱
public static String password = "qqqeee666"; // 授权码(登录邮箱-->设置-->邮箱安全设置-->客户端授权密码),这里不是邮箱的密码,切记!
public static String from = "888@163.com"; // 来源邮箱,使用当前账号
/**
* 发送邮件
*
* @param toEmail 收件人邮箱地址
* @param subject 邮件标题
* @param content 邮件内容 可以是html内容
*/
public void send(String toEmail, String subject, String content) {
// 1 准备发送邮件需要的参数
Properties props = new Properties();
// 设置主机地址 smtp.qq.com smtp.126.com smtp.163.com
props.put("mail.smtp.host", smtp_host);
// 是否打开验证:只能设置true,必须打开
props.put("mail.smtp.auth", true);
props.put("mail.smtp.ssl.enable", true);//QQ邮箱的SSL加密
// 2 连接邮件服务器
Session session = Session.getDefaultInstance(props); // session.setDebug(true);
// 创建邮件消息
MimeMessage message = new MimeMessage(session);
try {
// 设置发件人
// 4 设置发送者
InternetAddress fromAddress = new InternetAddress(from);
message.setFrom(fromAddress);
Address[] a = new Address[1];
a[0] = new InternetAddress(user);
message.setReplyTo(a);
// 设置收件人
InternetAddress to = new InternetAddress(toEmail);
message.setRecipient(MimeMessage.RecipientType.TO, to);
// 设置邮件标题
message.setSubject(subject);
// 设置邮件的内容体
message.setContent(content, "text/html;charset=UTF-8");
// 发送邮件
// 8 发送:坐火箭
Transport transport = session.getTransport("smtp");// 参数不能少,表示的是发送协议
// 登录邮箱,此处的密码是授权码
transport.connect(user, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("ok");
} catch (MessagingException e) {
String err = e.getMessage();
// 在这里处理message内容, 格式是固定的
System.out.println(err);
}
}
/**
* 发送邮件 带附件
*
* @param toEmail 收件人邮箱地址
* @param subject 邮件标题
* @param content 邮件内容 可以是html内容
* @param attachPath 附件路径
*/
public void send(String toEmail, String subject, String content, String attachPath) {
// 1 准备发送邮件需要的参数
Properties props = new Properties();
// 设置主机地址 smtp.qq.com smtp.126.com smtp.163.com
props.put("mail.smtp.host", smtp_host);
// 是否打开验证:只能设置true,必须打开
props.put("mail.smtp.auth", true);
props.put("mail.smtp.ssl.enable", true);//QQ邮箱的SSL加密
// 2 连接邮件服务器
Session session = Session.getDefaultInstance(props);
MimeMessage mm = new MimeMessage(session);
try {
//发件人
mm.setFrom(new InternetAddress(user));
//收件人
mm.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail)); // 设置收件人
// mm.setRecipient(Message.RecipientType.CC, new
// InternetAddress("XXXX@qq.com")); //设置抄送人
//标题
mm.setSubject(subject);
//创建多重消息
Multipart multipart = new MimeMultipart();
//body部分
BodyPart contentPart = new MimeBodyPart();
contentPart.setContent(content, "text/html;charset=utf-8");
multipart.addBodyPart(contentPart);
//附件部分
BodyPart attachPart = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource(attachPath);
attachPart.setDataHandler(new DataHandler(fileDataSource));
attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName()));
multipart.addBodyPart(attachPart);
mm.setContent(multipart);
// 8 发送:坐火箭
Transport transport = session.getTransport("smtp");// 参数不能少,表示的是发送协议
// 登录邮箱,此处的密码是授权码
transport.connect(user, password);
transport.sendMessage(mm, mm.getAllRecipients());
transport.close();
System.out.println("ok");
} catch (Exception e) {
String err = e.getMessage();
// 在这里处理message内容, 格式是固定的
System.out.println(err);
}
}
}
以上内容作为工具使用,接下来是调用部分。
public static void main(String[] args) {
//两个都可以用哦~~
// new SendMail().send("1371386540@qq.com", "激活测试", "test");
new SendMail().send("1371386540@qq.com", "激活测试", "test", "C:\\Users\\Administrator\\Desktop\\dot文件\\sortec\\aaatest.docx");
}
这个功能是我来公司后做的最快的一个,出效果后很开心,忍不住夸夸自己,对就是这么容易满足,也没啥追求,就是做好自己的工作内容就行。耶~ 继续加油