Java实现邮件传输
2017-03-08 10:23
197 查看
实现邮件的传输,首先必须理解TCP/IP中的SMTP协议的原理:SMTP(Simple Mail Transfer Protocol),称为“简单邮件传输协议”,SMTP是电子邮件服务器用来在TCP/IP网络上转发消息的协议。发起某一电子邮件的消息的客户端计算机,也使用SMTP来向某台本地服务器发送该消息以进行传输 。
用户永远都不必使用SMTP交谈,因为SMTP通信过程在后台进行。不过,有时候需要知道一点SMTP知识,以便理解针对未送达邮件的出错消息。而且,程序和脚本有时候会直接访问SMTP,向网络管理员发送电子邮件警告和警报。
与其他的TCP/IP应用服务相似,SMTP也通过TCP/IP协议栈与网络进行通信。电子邮件应用程序的职责很简单,因为该应用程序可以依赖TCP/IP协议软件的连接与验证服务。默认情况下,SMTP通信通过到SMTP服务器端口25的一个TCP连接进行。客户端与服务器之间的对话,由客户端发出的四字符标准命令(和数据)以及不时的从服务器发出的三位响应代码组成
原理图如下:
发件人--->电子邮件服务器--------->Integer--------->目的地电子邮件服务器<---------------->发件人
| | 检索协议
SMTP 邮箱
对于通过电子邮件发送二进制文件,一种更加普通而通过的解决方案已经通过MIME格式显现出来了。MIME是一种用来扩展Integer电子邮件的能力的通用格式,启动了MIME的电子邮件应用程序,会在传输之钱,把二进制附件编码成MIME格式。当收件人下载电子邮件消息时,其计算机启用了MIME的电子邮件应用程序将解码相应的附件,并将其恢复至最初形式。MIME为Integer邮件带来了一些创新,如:
(1).扩展了的字符集。MIME并不限于标准的128位ASCll字符集。这意味着你可以将用它传输特殊的字符集以及在美国英语中不存在的字符。
(2).无限制的文本行长度和消息长度。
(3).针对附件的标准编码技术。
(4).可以将图像,声音,链接和格式化集成到邮件消息中。
注释:用Java实现邮件的传输,实质上是属于通过第三方来发送邮件的。所以必须把发送人所指定的邮箱的SMTP打开,否则是不能通过第三方来发送邮件的。
以下是相关代码:
package com.cal; 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 Mail { public static void main(String[] args) throws Exception { Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.host", "smtp.sina.com"); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props); MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("hcwswjf@sina.com")); message.addRecipients(Message.RecipientType.TO, "2791752775@qq.com"); message.setSubject("伍金凡"); message.setText("啦啦啦啦"); message.saveChanges(); Transport ts = session.getTransport(); ts.connect("hcwswjf@sina.com", "123456789wjf"); ts.sendMessage(message, message.getAllRecipients()); ts.close(); } }