javamail如何处理退信
用 Apache James 搭建邮件服务器来收发邮件实践(一)
javamail发送邮件
使用Common Email轻松发送邮件推荐群组:Python更多企业应用
比如由于域名错误,用户名不存在,或者其他原因造成的无法发送的错误。
不要求分析错误原因,只要求1。识别是否是退信。2。得到接收失败的邮件地址。
我的考虑是可以根据邮件主题来标识,但是不通用,另外不知道邮件里,有没有退信标志位,以及接收失败的地址标识。如果有就好办了
推荐链接Java开发新方式:专注UI,快速开发!
1SMTP协议
用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。
因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)
2POP3协议
同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。
因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)
下图用于演示两帐户相互发送邮件的过程
31JavaMail API按其功能划分通常可分为如下三大类:
创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
32发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
33Session类
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
4邮件组织结构相关的API
MimeMessage类表示整封邮件。
MimeBodyPart类表示邮件的一个MIME消息。
MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。
5具体的例子程序
package cnedudlmusend;import javautilProperties;
import javaxactivationDataHandler;
import javaxactivationFileDataSource;
import javaxmailMessage;
import javaxmailSession;
import javaxmailTransport;
import javaxmailinternetInternetAddress;
import javaxmailinternetMimeBodyPart;
import javaxmailinternetMimeMessage;
import javaxmailinternetMimeMultipart;
import javaxmailinternetMimeUtility;
public class SendMail {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
//连接的邮件服务器的主机名
propsetProperty("mailsmtphost", "smtpsinacomcn");
//发送邮件的协议
propsetProperty("mailtransportprotocol", "smtp");
//是否向邮件服务器提交认证
propsetProperty("mailsmtpauth", "true");
//创建session
Session session = SessiongetInstance(prop);
sessionsetDebug(true);
//得到transport
Transport ts = sessiongetTransport();
//连接邮件服务器
tsconnect("smtpsinacomcn", "xxxx@sinacom", "xxxxx");
//发送邮件
MimeMessage message = createMessage(session);
tssendMessage(message, messagegetAllRecipients());
tsclose();
}
public static MimeMessage createMessage(Session session) throws Exception {
MimeMessage message = new MimeMessage(session);
//设置邮件的基本信息
messagesetFrom(new InternetAddress("xxxx@sinacom"));
messagesetRecipient(MessageRecipientTypeTO, new InternetAddress("1219070362@qqcom"));
messagesetSubject("test");
//正文
MimeBodyPart text = new MimeBodyPart();
//设置charaset可以解决中文正文的乱码问题,内嵌可下载的
textsetContent("你好xxx,<img src='c:/dogjpg' />测试成功!<br/><img src='cid:aaajpg' />", "text/html;charset=gbk");
//1
MimeBodyPart image = new MimeBodyPart();
imagesetDataHandler(new DataHandler(new FileDataSource("src/88jpg")));
imagesetContentID("aaajpg");
//附件
MimeBodyPart attach = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("src/javamail架包jar"));
attachsetDataHandler(dh);
//解决文件中文乱码问题
attachsetFileName(MimeUtilityencodeText(dhgetName()));
//描述正文和的关系
MimeMultipart mp = new MimeMultipart();
mpaddBodyPart(text);
mpaddBodyPart(image);
mpsetSubType("related");
//描述正文和附件
MimeMultipart mp2 = new MimeMultipart();
mp2addBodyPart(attach);
//将正文封装为一个body
MimeBodyPart content = new MimeBodyPart();
contentsetContent(mp);
mp2addBodyPart(content);
mp2setSubType("mixed");
messagesetContent(mp2);
messagesaveChanges();
return message;
}
}
javaxmailMessagingException: Can't send command to SMTP host;
上述异常的出现是因为发送邮件的服务器连接不上,
你确定你sina 邮箱开通了smtp 服务。
我记得新浪邮箱是要自己手工开通
这个错误是连不上邮件服务器的25端口。
1,检查邮件服务器是否正常,检查IP和端口是否写对。
2,检查你的主机到邮件服务器网络是否正常,可以用PING 或 TELNET IP PORT来测试。
0条评论