使用JavaMail连接邮件发送服务器smtp
Posted jazon@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JavaMail连接邮件发送服务器smtp相关的知识,希望对你有一定的参考价值。
与HTTP协议相同,收发邮件也是需要有传输协议的。
SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议;
POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议;
IMAP:(Internet Message Access Protocol,因特网消息访问协议)收发邮件协议,我们的课程不涉及该协议。
理解邮件发送过程
其实每个邮件服务器都由SMTP服务器和POP3服务器构成,其中SMTP服务器负责发邮件的请求,而POP3负责收邮件的请求。
当然,有时我们也会使用163的账号,向126的账号发送邮件。这时邮件是发送到126的邮件服务器,而对于163的邮件服务器是不会存储这封邮件的。
常见邮件服务器名称
这里列出只为讲述常规名称格式,具体参考各自官网。
163:smtp.163.com和pop3.163.com;
126:smtp.126.com和pop3.126.com;
sohu:smtp.sohu.com和pop3.sohu.com;
sina:smtp.sina.com和pop3.sina.com。
JavaMail
JavaMail概述
Java Mail是由SUN公司提供的专门针对邮件的API,主要Jar包:mail.jar、activation.jar。
JavaMail中主要类
java mail中主要类:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。
Session:表示会话,即客户端与邮件服务器之间的会话!想获得会话需要给出账户和密码,当然还要给出服务器名称。在邮件服务中的Session对象,就相当于连接数据库时的Connection对象。
MimeMessage:表示邮件类,它是Message的子类。它包含邮件的主题(标题)、内容,收件人地址、发件人地址,还可以设置抄送和暗送,甚至还可以设置附件。
Transport:用来发送邮件。它是发送器!
JavaMail牛刀小试
在使用telnet发邮件时,还需要自己来处理Base64编码的问题,但使用JavaMail就不必理会这些问题了,都由JavaMail来处理。
第一步:获得Session
Session session = Session.getInstance(Properties prop, Authenticator auth);
其中prop最少需要指定两个键值,一个是指定服务器主机名,另一个是指定是否需要认证!我们使用smtp服务器,当然需要认证!
Properties prop = new Properties();
prop.setProperty(“mail.host”, “smtp.163.com”);//设置服务器主机名
prop.setProperty(“mail.smtp.auth”, “true”);//设置需要认证
*特别注意,如果使用QQ邮箱,因为QQ邮箱使用了SSL,所以这里需要增加一下配置项
“mail.smtp.socketFactory.class”,“javax.NET.ssl.SSLSocketFactory“;
“mail.smtp.port”, “465”
“mail.smtp.socketFactory.port”, “465”
*
其中Authenticator是一个接口表示认证器,即校验客户端的身份。我们需要自己来实现这个接口,实现这个接口需要使用账户和密码。
Authenticator auth = new Authenticator()
public PasswordAuthentication getPasswordAuthentication ()
new PasswordAuthentication(“ittest”, “123456”);//用户名和密码
;
通过上面的准备,现在可以获取得Session对象了:
Session session = Session.getInstance(prop, auth);
第二步:创建MimeMessage对象
创建MimeMessage需要使用Session对象来创建:
MimeMessage msg = new MimeMessage(session);
然后需要设置发信人地址、收信人地址、主题,以及邮件正文。
msg.setFrom(new InternetAddress(“it@163.com”));//设置发信人
msg.addRecipients(RecipientType.TO, “it_cx@qq.com,it_xu@sina.com”);//设置多个收信人
msg.addRecipients(RecipientType.CC, “it_xie@sohu.com,it_yang@126.com”);//设置多个抄送
msg.addRecipients(RecipientType.BCC, ”ithq@hotmail.com”);//设置暗送
msg.setSubject(“这是一封测试邮件”);//设置主题(标题)
msg.setContent(“当然是hello world!”, “text/plain;charset=utf-8”);//设置正文
第三步:发送邮件
Transport.send(msg);//发送邮件
以上是JvaMail基本使用方法。
另外,如果要发送附件
如果想发送带有附件邮件,那么需要设置邮件的内容为MimeMultiPart。
MimeMulitpart parts = new MimeMulitpart();//多部件对象,可以理解为是部件的集合
msg.setContent(parts);//设置邮件的内容为多部件内容。
如果要查看JavaMail运行信息,则加上
session.setDebug(true)
以上是关于使用JavaMail连接邮件发送服务器smtp的主要内容,如果未能解决你的问题,请参考以下文章