java 实现邮件发送_Java中如何实现邮件的发送包括网页文件的发送

说明:

1、本程序可实现网页文件、普通文件的发送。

2、实现邮件发送需要三个jar包的支持:commons-codec-1.3.jar、commons-httpclient-3.0.jar(这两个jar包实现抓取互联网网页内容)以及mail.jar

具体实现:

一、首先建立MailAuthenticator类,继承自javax.mail.Authenticator类。此类实现发件箱的登陆验证。

packagecom.company.simplemail;

importjavax.mail.Authenticator;

importjavax.mail.PasswordAuthentication;

/**

* 服务器邮箱登录验证

*/

publicclassMailAuthenticatorextendsAuthenticator {

//     用户名(登录邮箱)

privateString username;

//     密码

privateString password;

/**

* 初始化邮箱和密码

* @param username 邮箱

* @param password 密码

*/

publicMailAuthenticator(String username, String password){

this.username = username;

this.password = password;

}

String getPassword() {

returnpassword;

}

@Override

protectedPasswordAuthentication getPasswordAuthentication() {

returnnewPasswordAuthentication(username, password);

}

String getUsername() {

returnusername;

}

publicvoidsetPassword(String password) {

this.password = password;

}

publicvoidsetUsername(String username) {

this.username = username;

}

}

二、 建立SimpleMailSender类,此类实现邮件的单发、群发等等,是邮件发送的核心类。

packagecom.company.simplemail;

importjava.util.List;

importjava.util.Properties;

importjavax.mail.MessagingException;

importjavax.mail.Multipart;

importjavax.mail.Session;

importjavax.mail.Transport;

importjavax.mail.internet.AddressException;

importjavax.mail.internet.InternetAddress;

importjavax.mail.internet.MimeBodyPart;

importjavax.mail.internet.MimeMessage;

importjavax.mail.internet.MimeMessage.RecipientType;

importjavax.mail.internet.MimeMultipart;

/**

* 简单邮件发送器,可单发,群发。

*/

publicclassSimpleMailSender {

//  发送邮件的props文件

privatefinaltransientProperties props = System.getProperties();

//    邮件服务器登录验证

privatetransientMailAuthenticator authenticator;

//    邮箱session

privatetransientSession session;

/**

* 初始化邮件发送器

* @param smtpHostName SMTP邮件服务器地址

* @param username 发送邮件的用户名(地址)

* @param password 发送邮件的密码

*/

publicSimpleMailSender(finalString smtpHostName,finalString username,

finalString password) {

init(username, password, smtpHostName);

}

/**

* 初始化邮件发送器

* @param username 发送邮件的用户名(地址),并以此解析SMTP服务器地址

* @param password 发送邮件的密码

*/

publicSimpleMailSender(finalString username,finalString password) {

// 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用

finalString smtpHostName ="smtp."+ username.split("@")[1];

init(username, password, smtpHostName);

}

/**

* 初始化

* @param username 发送邮件的用户名(地址)

* @param password 密码

* @param smtpHostName SMTP主机地址

*/

privatevoidinit(String username, String password, String smtpHostName) {

// 初始化props

props.put("mail.smtp.auth","true");

props.put("mail.smtp.host", smtpHostName);

// 验证

authenticator =newMailAuthenticator(username, password);

// 创建session

session = Session.getInstance(props, authenticator);

}

/**

* 发送邮件

* @param recipient收件人邮箱地址

* @param subject邮件主题

* @param content邮件内容

* @throws AddressException

* @throws MessagingException

*/

publicvoidsend(String recipient, String subject, String content)

throwsAddressException, MessagingException {

// 创建mime类型邮件

finalMimeMessage message =newMimeMessage(session);

// 设置发信人

message.setFrom(newInternetAddress(authenticator.getUsername()));

// 设置收件人

message.setRecipient(RecipientType.TO,newInternetAddress(recipient));

// 设置主题

message.setSubject(subject);

// 设置邮件内容

Multipart mp =newMimeMultipart("related");

MimeBodyPart mbp =newMimeBodyPart();

mbp.setContent(content.toString(),"text/html;charset=utf-8");

mp.addBodyPart(mbp);

message.setContent(mp);

// 设置邮件内容

//  message.setContent(content.toString(), "text/html;charset=utf-8");

// 发送

Transport.send(message);

}

/**

* 群发邮件

* @param recipients收件人们

* @param subject 主题

* @param content 内容

* @throws AddressException

* @throws MessagingException

*/

publicvoidsend(List recipients, String subject, String content)

throwsAddressException, MessagingException {

// 创建mime类型邮件

finalMimeMessage message =newMimeMessage(session);

// 设置发信人

message.setFrom(newInternetAddress(authenticator.getUsername()));

// 设置收件人们

finalintnum = recipients.size();

InternetAddress[] addresses =newInternetAddress[num];

for(inti =0; i 

addresses[i] =newInternetAddress(recipients.get(i));

}

message.setRecipients(RecipientType.TO, addresses);

// 设置主题

message.setSubject(subject);

// 设置邮件内容

message.setContent(content.toString(),"text/html;charset=utf-8");

// 发送

Transport.send(message);

}

/**

* 发送邮件

* @param recipient收件人邮箱地址

* @param mail邮件对象

* @throws AddressException

* @throws MessagingException

*

*/

publicvoidsend(String recipient, SimpleMail mail)

throwsAddressException, MessagingException {

send(recipient, mail.getSubject(), mail.getContent());

}

/**

* 群发邮件

* @param recipients 收件人们

* @param mail 邮件对 象

* @throws AddressException

* @throws MessagingException

*/

publicvoidsend(List recipients, SimpleMail mail)

throwsAddressException, MessagingException {

send(recipients, mail.getSubject(), mail.getContent());

}

}

三、 建立SimpleMail类,这只是个普通邮件类,主要用来封装所要发送的邮件信息。

packagecom.company.simplemail;

publicclassSimpleMail {

//邮件中的主题

privateString subject;

//邮件的内容(正文)

privateString content;

//可根据需要增加其他邮件元素

publicvoidsetSubject(String subject) {

this.subject = subject;

}

publicvoidsetContent(String content) {

this.content = content;

}

publicString getSubject() {

returnsubject;

}

publicString getContent() {

returncontent;

}

}

四、建立ReadHtmlFile类,此类用来读取网页文件(当然也能读取普通文件),将文件转换成String用来发送

packagecom.company.util;

importjava.io.BufferedInputStream;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.Reader;

importorg.apache.commons.httpclient.HttpClient;

importorg.apache.commons.httpclient.HttpException;

importorg.apache.commons.httpclient.methods.GetMethod;

publicclassReadHtmlFile {

publicstaticHttpClient client =newHttpClient();

//读取普通文件

publicstaticString readFile(String filename) {

File file =newFile(filename);

Reader reader =null;

StringBuffer stb =newStringBuffer();

intcharread =0;

char[] temps =newchar[100];

try{

reader =newInputStreamReader(newFileInputStream(file));

while((charread = reader.read(temps)) != -1) {

if(charread == temps.length) {

stb.append(temps);

temps =newchar[100];

charread =0;

}

}

stb.append(temps);

reader.close();

}catch(Exception e) {

e.printStackTrace();

}

String str = stb.toString();

returnstr;

}

/**

*

* 所要发送的网页中,不要使用外联样式,脚本等,

* 因为各大邮箱后台的过滤算法会过滤掉css,script等

* 样式用标签style属性写

* 图片、链接必须使用绝对地址 (http://.....) 形式才能接收显示

* */

publicstaticString getSource(String url) {

GetMethod method =newGetMethod(url);

try{

client.executeMethod(method);

}catch(HttpException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

InputStream in =null;

try{

in = method.getResponseBodyAsStream();

}catch(IOException e1) {

// e1.printStackTrace();

}

in =newBufferedInputStream(in);

Reader r =newInputStreamReader(in);

intc;

StringBuffer buffer =newStringBuffer();

try{

while((c = r.read()) != -1)

buffer.append((char) c);

}catch(IOException e) {

e.printStackTrace();

}

try{

in.close();

}catch(IOException e) {

e.printStackTrace();

}

method.releaseConnection();

returnbuffer.toString();

}

}

五、建立测试类,可以发送邮件了!!!

packagecom.company.simplemail;

importjava.util.ArrayList;

importjava.util.List;

importorg.junit.Test;

importcom.company.util.ReadHtmlFile;

publicclassMailTest {

/**

* 单发

* */

@Test

publicvoidtestSingleSend(){

SimpleMail sm=newSimpleMail();

sm.setSubject("第一封邮件");

String str = ReadHtmlFile.getSource("http://www.baidu.com");

//String str = ReadHtmlFile.readFile("这里填写你需要发送的本地文件路径");

System.out.println(str);

sm.setContent(str);

SimpleMailSender sms=newSimpleMailSender(""这里填写你的发件箱","这里填写你的发件箱密码");

try{

sms.send("这里需要填写接收邮件的邮箱", sm);

System.out.println("执行完成!!");

}catch(Exception e) {

e.printStackTrace();

}

}

/**

* 群发

*

* */

@Test

publicvoidtestMassSend(){

SimpleMail sm=newSimpleMail();

sm.setSubject("第一封邮件");

String str = ReadHtmlFile.getSource("http://www.baidu.com");

//String str = ReadHtmlFile.readFile("这里填写需要发送的本地文件路径");

System.out.println(str);

sm.setContent(str);

SimpleMailSender sms=newSimpleMailSender("这里填写你的发件箱","这里填写你的发件箱密码");

List recipients=newArrayList();

recipients.add("这里需要填写接收邮件的邮箱");

recipients.add("这里需要填写接收邮件的邮箱");

recipients.add("这里需要填写接收邮件的邮箱");

recipients.add("这里需要填写接收邮件的邮箱");

try{

sms.send(recipients, sm);

System.out.println("执行完成!!");

}catch(Exception e) {

e.printStackTrace();

}

}

}

最后再次强调:

1,所要发送的网页中,不要使用外联样式,脚本等,因为各大邮箱后台的过滤算法会过滤掉css,script等。

2,样式用标签style属性写。

3, 图片、链接必须使用绝对地址 (http://.....) 形式才能接收显示。

4,一般用于发送的网页文件都是按上面说的要求,自己另外制作的,专门用于邮件发送的网页。在互联网上抓取的网页发送后,一般都不能在收件箱中完美的显示。

【编辑推荐】

【责任编辑:小林 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值