计算机网络课程设计竟然是设计邮件系统…晕唉。
邮箱服务涉及SMTP,POP3,MIME等协议,要是让我从最底层去实现,很明显不可能呀[捂脸]
站在前辈的肩上,可以少走很多弯路!
参考资料
图片来源参考资料2
所需jar包maven依赖
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
具体实现邮件发送
package com.wy.action;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
* 发送图片邮件
* @author 沪旦铭
*
*/
public class SendEmail {
//用于给用户发送邮件的邮箱
private static String from = "";
//接收人邮箱
private static String to = "";
//邮箱的用户名 这个和from一样的内容
private static String username = "";
//邮箱的密码 注意这个密码
private static String password = "";
//发送邮件的服务器地址
private static String host = "smtp.163.com";
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
// 设置邮件服务器主机名
prop.setProperty("mail.host", host);
// 发送邮件协议名称
prop.setProperty("mail.transport.protocol", "smtp");
// 发送服务器需要身份验证
prop.setProperty("mail.smtp.auth", "true");
// 开启debug调试
prop.setProperty("mail.debug", "true");
//使用JavaMail发送邮件的5个步骤
//1、创建session
Session session = Session.getInstance(prop);
//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//2、通过session得到transport对象
Transport ts = session.getTransport();
//3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证
ts.connect(host, SendEmail.username,SendEmail.password );
//4、创建邮件
//4.1创建图片邮件
// Message message = createImageMail(session);
//4.2创建附件邮件
// Message message = createAttachMail(session);
//4.3创建图片和附件邮件
Message message = createMixedMail(session);
//5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
//创建还有图片的邮件
private static Message createImageMail(Session session) throws AddressException, MessagingException, FileNotFoundException, IOException {
//创建邮件
Message message = new MimeMessage( session );
//设置邮件基本信息
message.setFrom(new InternetAddress( SendEmail.from ));
//收件人 Message.RecipientType.TO
//Message.RecipientType.BCC 密送人 (即抄送人不知道)
//Message.RecipientType.CC 抄送人
message.setRecipient(Message.RecipientType.TO, new InternetAddress( SendEmail.to));
//设置邮箱主题|邮箱标题
message.setSubject("这是一张图片");
//准备邮件正文数据
MimeBodyPart part = new MimeBodyPart();
part.setContent("这是一封有图片的邮件<img src='cid:1.jpg'>", "text/html;charset=UTF-8");
//准备图片数据
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("g://header.jpg"));
image.setDataHandler(dh);
image.setContentID("1.jpg");
//描述数据关系
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(part);
mm.addBodyPart(image);
mm.setSubType("related");
message.setContent(mm);
message.saveChanges();
//保存邮件到本地
message.writeTo( new FileOutputStream("g://imageEmail.eml") );
return message;
}
//附件邮件发送
public static MimeMessage createAttachMail(Session session) throws Exception{
//创建邮件
MimeMessage message = new MimeMessage( session );
//设置邮件基本信息
message.setFrom(new InternetAddress( SendEmail.from ));
//收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(SendEmail.to));
//设置邮箱主题|邮箱标题
message.setSubject("附件邮件发送");
//创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码
MimeBodyPart text = new MimeBodyPart();
text.setContent("使用JavaMail创建的带附件的邮件", "text/html;charset=UTF-8");
//创建邮件附件
MimeBodyPart attach = new MimeBodyPart();
attach.attachFile("g://header.jpg");
//创建容器描述数据关系
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
mp.addBodyPart(attach);
mp.setSubType("mixed");
message.setContent(mp);
message.saveChanges();
//将创建的Email写入到g盘存储
message.writeTo(new FileOutputStream("g://attachMail.eml"));
//返回生成的邮件
return message;
}
//创建图片和附件邮件
private static MimeMessage createMixedMail(Session session) throws AddressException, MessagingException, IOException {
//创建邮件
MimeMessage message = new MimeMessage( session );
//设置邮件基本信息
message.setFrom(new InternetAddress( SendEmail.from ));
//收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(SendEmail.to));
//设置邮箱主题|邮箱标题
message.setSubject("图片和附件邮件发送");
//准备邮件正文数据
MimeBodyPart text = new MimeBodyPart();
text.setContent("这是图片邮件,当然包括附件<img src='cid:1.jpg'>", "text/html;charset=UTF-8");
//准备图片数据
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("g://header.jpg"));
image.setDataHandler(dh);
image.setContentID("1.jpg");
//创建邮件附件
MimeBodyPart attach = new MimeBodyPart();
attach.attachFile("g://header.jpg");
//创建容器描述数据关系
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
mp.addBodyPart(image);
mp.addBodyPart(attach);
mp.setSubType("mixed");
message.setContent(mp);
message.saveChanges();
return message;
}
}