简单邮件:没有附件和图片,纯文本邮件;
复杂邮件:有附件和图片;
要发送邮件,需要获得协议和支持。开启服务pop3/smtp。
发送简单邮件
public class MailDemo01{
public static void main(String[] args) throws Exception{
Properties prop = new Properties();
prop.setProperty("mail.host","smtp.qq.com"); // 设置qq邮箱服务器
prop.setProperty("mail.transport","smtp"); // 邮件发送协议
prop.setProperty("mail.smtp.auth","true"); // 需要验证用户名密码
// 关于QQ邮箱,还需要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",sf);
// 使用JavaMail发送邮件的5个步骤
// 1. 创建定义整个应用程序所需的环境信息的Session对象
// QQ才有
Session.getDefaultInstance(prop, new Authenticator(){
public PasswordAuthentication getPasswordAuthentication(){
// 发件人邮件用户名、授权码
return new PasswordAuthentication("123456@qq.com","授权码");
}
});
// 开启Session的Debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
// 2. 通过session得到transport对象
Transport ts = session.getTransport();
// 3. 使用邮箱的用户名和授权码连接上邮件服务器
ts.connect("smtp.qq.com","123456@qq.com","授权码");
// 4. 创建邮件
// 注意需要传递Session
MimeMessage message = new MimeMessage(session);
// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己发给自己
message.setRecipient(Message.RecipientType.To,new InternetAddress("123456@qq.com"));
// 邮件的标题
message.setSubject("只包含文本的简单邮件");
// 邮件的文本内容
message.setContent("<h1>你好啊</h1>","text/html;charset=UTF-8");
// 5. 发送邮件
ts.sendMessage(message,message.getAllRecipients());
// 6. 关闭连接
ts.close();
}
}
发送复杂邮件【加图片】
public class MailDemo01{
public static void main(String[] args) throws Exception{
Properties prop = new Properties();
prop.setProperty("mail.host","smtp.qq.com"); // 设置qq邮箱服务器
prop.setProperty("mail.transport","smtp"); // 邮件发送协议
prop.setProperty("mail.smtp.auth","true"); // 需要验证用户名密码
// 关于QQ邮箱,还需要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",sf);
// 使用JavaMail发送邮件的5个步骤
// 1. 创建定义整个应用程序所需的环境信息的Session对象
// QQ才有
Session.getDefaultInstance(prop, new Authenticator(){
public PasswordAuthentication getPasswordAuthentication(){
// 发件人邮件用户名、授权码
return new PasswordAuthentication("123456@qq.com","授权码");
}
});
// 开启Session的Debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
// 2. 通过session得到transport对象
Transport ts = session.getTransport();
// 3. 使用邮箱的用户名和授权码连接上邮件服务器
ts.connect("smtp.qq.com","123456@qq.com","授权码");
// 4. 创建邮件
// 注意需要传递Session
MimeMessage message = new MimeMessage(session);
// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己发给自己
message.setRecipient(Message.RecipientType.To,new InternetAddress("123456@qq.com"));
// 邮件的标题
message.setSubject("只包含文本的简单邮件");
// 邮件内容===================================
// 准备图片数据
MimeBodyPart image = new MimeBodyPart();
// 图片需要经过数据处理。。。 DataHandler:数据处理
DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
image.setDataHandler(dh); // 在Body中放入这个处理的图片数据
image.setContentID(bz.jpg); // 给图片设置一个ID,我们在后面可以使用
// 准备正文数据
MimeBodyPart text = new MinmeBodyPart();
text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件","text/html;charset=UTF-8");
// 描述数据关系
MimeMultipart mm = new MimeBodyPart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related");
// 设置到消息中,保存修改
message.setContent(mm); // 把最后编辑好的邮件放在消息中
message.SaveChanges(); // 保存修改
// 5. 发送邮件
ts.sendMessage(message,message.getAllRecipients());
// 6. 关闭连接
ts.close();
}
}
发送复杂邮件【加图片附件】
public class MailDemo01{
public static void main(String[] args) throws Exception{
Properties prop = new Properties();
prop.setProperty("mail.host","smtp.qq.com"); // 设置qq邮箱服务器
prop.setProperty("mail.transport","smtp"); // 邮件发送协议
prop.setProperty("mail.smtp.auth","true"); // 需要验证用户名密码
// 关于QQ邮箱,还需要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",sf);
// 使用JavaMail发送邮件的5个步骤
// 1. 创建定义整个应用程序所需的环境信息的Session对象
// QQ才有
Session.getDefaultInstance(prop, new Authenticator(){
public PasswordAuthentication getPasswordAuthentication(){
// 发件人邮件用户名、授权码
return new PasswordAuthentication("123456@qq.com","授权码");
}
});
// 开启Session的Debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
// 2. 通过session得到transport对象
Transport ts = session.getTransport();
// 3. 使用邮箱的用户名和授权码连接上邮件服务器
ts.connect("smtp.qq.com","123456@qq.com","授权码");
// 4. 创建邮件
// 注意需要传递Session
MimeMessage message = new MimeMessage(session);
// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己发给自己
message.setRecipient(Message.RecipientType.To,new InternetAddress("123456@qq.com"));
// 邮件的标题
message.setSubject("只包含文本的简单邮件");
// 邮件内容===================================
// 准备图片数据
MimeBodyPart body1 = new MimeBodyPart();
// 图片需要经过数据处理。。。 DataHandler:数据处理
DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
body1.setDataHandler(dh); // 在Body中放入这个处理的图片数据
body1.setContentID(bz.jpg); // 给图片设置一个ID,我们在后面可以使用
// 准备正文数据
MimeBodyPart body2 = new MinmeBodyPart();
body2.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件","text/html;charset=UTF-8");
// 附件
MimeBodyPart body3 = new MimeBodyPart();
body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties")));
body3.setFileName("log4j.properties"); // 设置附件名字
// 拼接邮件正文内容
MimeMultipart multipart1 = new MimeMultipart();
multipart1.addBodyPart(body1);
multipart1.addBodyPart(body2);
multipart1.setSubType("related"); // 文本和图片内联成功
// 把拼装好的正文内容设置为主体
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(multipart1);
// 拼接附件
MimeMultipart allFile = new MimeMultipart();
addFile.addBodyPart(body3);
addFile.addBodyPart(contentText);
addFile.setSubType("mixed"); // 正文和附件都存在邮件中,所有类型设置为mixed
// 设置到消息中,保存修改
message.setContent(addFile); // 把最后编辑好的邮件放在消息中
message.SaveChanges(); // 保存修改
// 5. 发送邮件
ts.sendMessage(message,message.getAllRecipients());
// 6. 关闭连接
ts.close();
}
}