SMTP:Simle Message Transfer Protocal 简单消息传输协议。发送邮件时使用的协议。描述了数据该如何表示。默认使用的端口:25
POP:Post Office Protocal邮局协议。接收邮件时使用的协议。默认使用的端口:110
二、手工发送邮件和接收邮件(熟练SMTP等协议的)
usst1@163.com usst1
usst2@163.com usst2
服务器地址 SMTP:smtp.163.com POP3:pop.163.com
Base64编码:
用户名:usst1 dXNzdDE=
密码:usst1 dXNzdDE=
1、手工发送邮件的过程:telnet
telnet smtp.163.com 25
------------------------------------------------------------以下属于SMTP协议的内容
ehlo xjp //向服务器打招呼
auth login //请求认证
//提示输入用户名和密码(Base64编码后的)
dXNzdDE=
dXNzdDE=
mail from:<usst1@163.com>
rcpt to:<usst2@163.com>
data //说明邮件的开始
//邮件内容是要遵循一定格式的:RFC822规范
from:usst1@163.com
to:usst2@163.com
subject:这是一封手工发送的邮件
aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
.cccccccccccccccccccc
------------------------------------------------------------
quit
2、手工收取邮件(POP协议)
telnet pop.163.com 110
----------------------------------以下属于POP协议的东东
user usst2
pass usst2
stat //返回邮箱的统计信息
list 邮件编号 //返回某一封的邮件统计信息
retr 邮件编号 //取出某一封邮件的内容
----------------------------------
quit
三、JavaMail的核心API简介
导入jar包:mail.jar (注意:Javamail的API依赖jaf(Java Activation Framework)框架,还需要导入jaf的jar包。如果使用的是JDK6及以上版本,就不需要了)
Session:代表邮件的环境
Message:代表邮件
BodyPart:代表复杂邮件中的每一部分
Multipart:描述由多个BodyPart组成的邮件的关系
四、发送一个既有文本,文本中还内嵌图片的邮件,还有附件的邮件的示例
public class sendMailDemo { public static void main(String[] args) throws Exception { Properties props = new Properties();//环境变量设置。发送邮件时才需要 props.setProperty("mail.transport.protocol", "smtp");//发送使用的协议 props.setProperty("mail.host", "smtp.163.com");//发送服务器的主机地址 props.setProperty("mail.smtp.auth", "true");//请求身份验证 props.setProperty("mail.debug", "true");//调试模式 // Session session = Session.getDefaultInstance(props); Session session = Session.getDefaultInstance(props,new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("usst1","usst1"); } }); MimeMessage message = new MimeMessage(session);//代表一封邮件 message.setFrom(new InternetAddress("usst1@163.com"));//设置发件人 message.setRecipients(Message.RecipientType.TO, "usst2@163.com");//设置收件人 message.setSubject("这是一封文本中内嵌图片的邮件");//设置主题 //文本部分 MimeBodyPart textPart = new MimeBodyPart(); textPart.setContent("图片 begin<img src='cid:tp'/>end", "text/html;charset=UTF-8"); //内嵌图片部分 MimeBodyPart imagePart = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("D:/1.jpg")); imagePart.setDataHandler(dh); imagePart.setContentID("tp"); //文本和内嵌图片合体 MimeMultipart mpart1 = new MimeMultipart(); mpart1.addBodyPart(textPart); mpart1.addBodyPart(imagePart); mpart1.setSubType("related"); MimeBodyPart textImagePart = new MimeBodyPart(); textImagePart.setContent(mpart1); //附件部分 MimeBodyPart attachmentPart = new MimeBodyPart(); dh = new DataHandler(new FileDataSource("D:/附件.rar")); String filename = dh.getName();//获取文件名 System.out.println(filename); attachmentPart.setDataHandler(dh); attachmentPart.setFileName(MimeUtility.encodeText(filename));//手工设置文件名.中文文件名要注意编码 //全部合体 MimeMultipart mpart2 = new MimeMultipart(); mpart2.addBodyPart(textImagePart);//文本加内嵌图片 mpart2.addBodyPart(attachmentPart);//附件 mpart2.setSubType("mixed");//复杂关系 message.setContent(mpart2); message.saveChanges(); // message.writeTo(new FileOutputStream("D:/1.eml")); //写入本地保存 //发送邮件 Transport ts = session.getTransport();//创建发送邮件 ts.connect("usst1","usst1");//连接 ts.sendMessage(message, message.getAllRecipients()); ts.close(); } }