1。邮件发送使用的协议:
SMTP:(重点)
Simple Message Transfer Protocal:简单消息传输协议。发送协议。
默认使用的端口:25
POP:
Post Office Protocal:邮局协议。接收协议。
默认使用的端口:110
2。邮件发送的过程。
3。案例:
Message:代表着一封邮件。
从wangyanming624@163.com 往 wangyanminghncj@163.com发送邮件
案例一:只有文本的邮件
package sendmail;
import java.io.FileOutputStream;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
//发送邮件
public class MessageDemo1 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();//key value:配置参数。真正发送邮件时再配置
props.setProperty("mail.transport.protocol", "smtp");//指定邮件发送的协议,参数是规范规定的
props.setProperty("mail.host", "smtp.163.com");//指定发件服务器的地址,参数是规范规定的
// props.setProperty("mail.debug", "true");//邮件发送的调试模式,参数是规范规定的
props.setProperty("mail.smtp.auth", "true");//请求服务器进行身份认证。参数与具体的JavaMail实现有关
Session session = Session.getInstance(props);//发送邮件时使用的环境配置
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
//设置邮件的头
message.setFrom(new InternetAddress("wangyanming624@163.com"));
message.setRecipients(Message.RecipientType.TO, "wangyanminghncj@163.com");
message.setSubject("This is only text message");
//设置正文
message.setContent("<h1>hello</h1>", "text/html");
// message.setText("<h1>hello</h1>");//纯文本
message.saveChanges();
//发送邮件
Transport ts = session.getTransport();
ts.connect("wangyanming624", "your password");
ts.sendMessage(message, message.getAllRecipients());//对象,用实例方法
}
}
案例二:文本中内嵌图片的邮件
package sendmail;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
//发送邮件
public class MessageDemo2 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();//key value:配置参数。真正发送邮件时再配置
props.setProperty("mail.transport.protocol", "smtp");//指定邮件发送的协议,参数是规范规定的
props.setProperty("mail.host", "smtp.163.com");//指定发件服务器的地址,参数是规范规定的
// props.setProperty("mail.debug", "true");//邮件发送的调试模式,参数是规范规定的
props.setProperty("mail.smtp.auth", "true");//请求服务器进行身份认证。参数与具体的JavaMail实现有关
Session session = Session.getInstance(props);//发送邮件时使用的环境配置
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
//设置邮件的头
message.setFrom(new InternetAddress("wangyanming624@163.com"));
message.setRecipients(Message.RecipientType.TO, "wangyanminghncj@163.com");
message.setSubject("开学通知");
//设置正文
//搞出文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("aaa<img src='cid:tongzhi'/>aaa", "text/html");
//搞图片部分
MimeBodyPart imagePart = new MimeBodyPart();
imagePart.setContentID("tongzhi");
//把磁盘上的文件加到part中使用到了JAF框架
DataHandler dh = new DataHandler(new FileDataSource("src/1.jpg"));
imagePart.setDataHandler(dh);
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(textPart);
mp.addBodyPart(imagePart);
mp.setSubType("related");//有关系的
message.setContent(mp);
message.saveChanges();
//发送邮件
Transport ts = session.getTransport();
ts.connect("wangyanming624", "your password");
ts.sendMessage(message, message.getAllRecipients());//对象,用实例方法
}
}
案例三:文本中内嵌图片还有附件的邮件
package sendmail;
import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
//发送邮件
public class MessageDemo3 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();//key value:配置参数。真正发送邮件时再配置
props.setProperty("mail.transport.protocol", "smtp");//指定邮件发送的协议,参数是规范规定的
props.setProperty("mail.host", "smtp.163.com");//指定发件服务器的地址,参数是规范规定的
// props.setProperty("mail.debug", "true");//邮件发送的调试模式,参数是规范规定的
props.setProperty("mail.smtp.auth", "true");//请求服务器进行身份认证。参数与具体的JavaMail实现有关
Session session = Session.getInstance(props);//发送邮件时使用的环境配置
// session.setDebug(true);
MimeMessage message = new MimeMessage(session);
//设置邮件的头
message.setFrom(new InternetAddress("wangyanming624@163.com"));
message.setRecipients(Message.RecipientType.TO, "wangyanminghncj@163.com");
message.setSubject("风机资料");
//设置正文
//搞出文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("风机<img src='cid:mm'/>aaa", "text/html;charset=UTF-8");
//搞图片部分
MimeBodyPart imagePart = new MimeBodyPart();
imagePart.setContentID("mm");
//把磁盘上的文件加到part中使用到了JAF框架
DataHandler dh = new DataHandler(new FileDataSource("src/风机.jpg"));
imagePart.setDataHandler(dh);
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(textPart);
mp.addBodyPart(imagePart);
mp.setSubType("related");//有关系的
MimeBodyPart textImageParts = new MimeBodyPart();
textImageParts.setContent(mp);
//创建附件部分
MimeBodyPart attachmentPart = new MimeBodyPart();
dh = new DataHandler(new FileDataSource("src/计划.docx"));
String filename = dh.getName();
System.out.println("dh:"+filename);
attachmentPart.setDataHandler(dh);
//手工设置一下文件名
attachmentPart.setFileName(MimeUtility.encodeText(filename));
MimeMultipart finalMp = new MimeMultipart();
finalMp.addBodyPart(textImageParts);
finalMp.addBodyPart(attachmentPart);
finalMp.setSubType("mixed");
message.setContent(finalMp);
message.saveChanges();
//发送邮件
Transport ts = session.getTransport();
ts.connect("wangyanming624", "your password");
ts.sendMessage(message, message.getAllRecipients());//对象,用实例方法
}
}