邮件协议和邮局协议:
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议。IMAP协议运行在TCP/IP协议之上,使用的端口是143。IMAP功能:提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本。POP3功能:POP3提供了快捷的邮件下载服务,用户可以利用POP3把邮箱里的信下载到PC上进行离线阅读。一旦邮件进入PC的本地硬盘,就可以选择把邮件从服务器上删除,然后脱离与Internet的连接并选择在任何时候阅读已经下载的邮件。
POP3与IMAP的不同点与相同点:
它与POP3协议的主要区别是:用户可以不用将所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作,IMAP客户端软件完整支持IMAP4rev1的话(如Netscape 4.5),则你还可以享受选择性下载附件的服务。例如你收的邮件中有多个附件,你可以选择需要的附件下载,多余的附件可以不用下载。IMAP 可以从整体上提供更稳定的使用体验。POP3 更易丢失邮件或多次下载相同的邮件,而 IMAP 则可以通过在邮件客户端和网络邮箱之间进行双向同步的功能来避免这种情况。
相同点:无论是POP3还是IMAP4,进来的邮件都存储在中央的邮件服务器上。用户使用遵循协议的邮件客户软件来连接到邮件服务器上,先进行身份验证,鉴定登录名和口令,然后用户才获得访问邮箱的权利。
下面是我在网上找的一些服务器信息供参考:
网易163免费邮箱相关服务器信息:
QQ邮箱服务器信息:
JavaMail来进行邮件传输:
我们可以在自己的电脑上安装安装邮件服务器apache-james-2.3.2,或者直接使用门户网站的邮件服务器来进行邮件传输。
下面是我用Java程序编写的来进行邮件传输,我用的是SMTP(简单邮件传输协议)进行邮件传输。以163邮箱为例:首先不是所有邮箱网站都对用户开通SMTP服务,163需要自己手动开通,(开通方式自行百度,很简单,这里就不多说了)开通后会生成一个授权密码(这个密码用于在客户端等登录用户的密码,除网站是用自己原来的密码外)。下面是详细的代码:下面程序需导入javaee-api-6.0.jar 跟 mail.jar。
代码一:(用部件形式)
public class MailTest {
@Test
public void test() throws AddressException, MessagingException {
Properties pro=new Properties();
pro.setProperty("mail.host", "smtp.163.com");//设置邮箱服务器地址
pro.setProperty("mail.smtp.auth", "true");//设置邮件服务器是否需要登录认证
Authenticator auth=new Authenticator(){
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("邮箱","授权密码");//指定用户名和密码(密码为授权密码)
}
};
Session session=Session.getInstance(pro, auth);
/*
* 2.创建MimeMessage
*/
//创建邮件对象
MimeMessage msg=new MimeMessage(session);
msg.setFrom(new InternetAddress("发件人邮箱"));//设置发件人
msg.addRecipient(RecipientType.TO, new InternetAddress("邮箱"));//设置收件人
//msg.addRecipient(RecipientType.CC, new InternetAddress("邮箱"));//设置抄送人
//msg.addRecipient(RecipientType.BCC, new InternetAddress("邮箱"));//设置暗送件人
msg.setSubject("哈哈哈");//设置邮件主题
//可以装载多个部件,可以看成一个集合
MimeMultipart partList=new MimeMultipart();
msg.setContent(partList);
//创建一个部件
MimeBodyPart part1=new MimeBodyPart();
//为部件设置内容
part1.setContent("测试内容1", "text/html;charset=UTF-8");
//添加部件到集合中
partList.addBodyPart(part1);
//又创建一个部件
//MimeBodyPart part2=new MimeBodyPart();
//为部件指定附件
//part1.attachFile("D:/xx.jpg");
//指定附件文件名称
//如果附件名称为中文,可使用使用MimeUtility.encodeText()对中文进行编码
//part2.setFileName(MimeUtility.encodeText("大人.jpg"));//不是中文可以是这样子part2.setFileName("jjjj.jpg"));
//添加部件到集合中
//partList.addBodyPart(part2);
/*
* 3.发送
*
*/
Transport.send(msg);
}
}
代码二:(不用部件形式)
public class MailTest {
@Test
public void test() throws AddressException, MessagingException {
Properties pro=new Properties();
pro.setProperty("mail.host", "smtp.163.com");//设置邮箱服务器地址
pro.setProperty("mail.smtp.auth", "true");//设置邮件服务器是否需要登录认证
Authenticator auth=new Authenticator(){
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("邮箱","授权密码");//指定用户名和密码(密码为授权密码)
}
};
Session session=Session.getInstance(pro, auth);
/*
* 2.创建MimeMessage
*/
//创建邮件对象
MimeMessage msg=new MimeMessage(session);
msg.setFrom(new InternetAddress("发件人邮箱"));//设置发件人
msg.addRecipient(RecipientType.TO, new InternetAddress("邮箱"));//设置收件人
//msg.addRecipient(RecipientType.CC, new InternetAddress("邮箱"));//设置抄送人
//msg.addRecipient(RecipientType.BCC, new InternetAddress("邮箱"));//设置暗送件人
msg.setSubject("哈哈哈");//设置邮件主题
msg.setContent("测试内容", "text/html;charset=UTF-8");//设置发送内容
/*
* 3.发送
*
*/
Transport.send(msg);
}
}
上面的代码是简单的Javamail入门案例,更详细的javamail可参考API!!!