- 1. 需求
- 用Java完成发邮件的小程序,可用代理,可添加附件
- 2.实现关键部分
- jar包:javax.mail.jar(主要包,发送邮件相关),activation-1.1.1.jar(主要用来处理附件)
- 代码太多,这里就讲下思路:
-
- 1)设置session等完成邮件基础设置(代码片段):
-
然后包装MimeMessage,即设置邮件内容(代码片段):this.auth = new MailAuthenticator(username,password); Session session = Session.getDefaultInstance(pros,auth); session.setDebug(true); //设置获取 debug 信息 mimeMessage = new MimeMessage(session);
-
mimeMessage.setSubject(sub); mimeMessage.setText(text); mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); mimeMessage.setSentDate(new Date()); mimeMessage.setFrom(new InternetAddress(username,username));
- 然后利用Transport发送MimeMessage;
-
这样就完成基本的流程。Transport.send(mimeMessage);
- 2)在邮件发送前的任何地方,添加如下代码:
-
System.setProperty("socksProxyHost", 代理IP); System.setProperty("socksProxyPort",代理接口);
- 实现调用代理。
- 3)包装multipart,设置附件信息,
-
实现添加附件功能。if(multipart==null){ multipart = new MimeMultipart(); } multipart.addBodyPart(writeFiles(file)); mimeMessage.setContent(multipart);
- 注:在自己写的程序中发送邮件,相当于利用第三方操作自己的邮箱,这个时候有些邮箱就要求做用户密码和SSL验证,我测试用的QQ邮箱就需要,实现这个的关键,要先新建一个用户密码验证类MailAuthenticator,实现验证关键代码如下:
this.auth = new MailAuthenticator(username,password); Session session = Session.getDefaultInstance(pros,auth);
- 代码中pros,是个Properties对象,包含了SSL验证等相关信息,如下:
- 3.完成
-
- 程序最终实现见http://code.taobao.org/p/MailSender828/src/trunk/SendMail/
- 配置信息都单独放在properties文件中,方便打包后再次修改,其中:
- config.properties是存放发送邮件服务器、SSL验证信息、代理等信息的文件;
- mail.properties是存放具体邮件内容,例如收发件人邮箱地址、标题等内容的文件;
- attachments.txt是存放附件附件实际路径的文档,一个文件路径一行,文档可以为空。