`

通过smtp实现html邮件转发

    博客分类:
  • java
阅读更多

学习笔记,把Email_Autherticatorbean类嵌入到HtmlEmail中只是想把功能的代码放到一个文件中,希望此文读者不要见怪。

 

package common;

import java.util.Date;
import java.util.Properties;

//要加入email.jar和activation.jar这两个包
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
 * <p>HtmlEmail  目前只支持smtp转发邮件</p>
 * @author bing
 * @version 1.0, 2010-10-16
 */
public class HtmlEmail
{

	/**
	 * <p>
	 *     步骤:<br/>
	 *     1、发送人邮箱验证;<br/>
	 *     2、获取邮件发送器;<br/>
	 *     3、生成邮件;<br/>
	 *         3.1、设置邮件主题;<br/>
	 *         3.2、设置正文(MINI邮件);<br/>
	 *         3.3、附件处理;<br/>
	 *     4、邮件信息处理;<br/>
	 *     5、发送邮件。<br/>
	 * </P>
	 * @param host			邮箱代理商smtp服务器地址
	 * @param from			发送人邮箱地址
	 * @param password		发送人邮箱密码
	 * @param to			收件人邮箱地址
	 * @param htmlContext	html邮件内容
	 * @param fixDataSource	是否将html邮件中的img标签的src属性通配符匹配图片附件,匹配时要注意:建议附件全为图片 通匹符编号从0开始
	 * @param dataSources	附件地址(String类型) 数组 下标从0开始 可选项,可以不写
	 * @return
	 * @author bing
	 */
	@SuppressWarnings("static-access")
    public boolean send(String host, String from, String password, String to, String htmlContext, boolean fixDataSource, String... dataSources)
	{
		try
		{
		    ///// 准备工作 /////
			Properties props = new Properties(); 
			Session sendMailSession; 
			//Store store; 
			Transport transport; 
			Email_Autherticatorbean auth=null;
			
			///// 1、发送人邮箱验证  /////
			
			props.put("mail.smtp.host", host); // 代理主机
			props.put("mail.smtp.auth", "true"); //如果需要验证
			props.put("mail.smpt.port", "25"); // 代理主机端口
			auth =  new Email_Autherticatorbean(from,password); // 发件人的邮箱及密码验证规则
			sendMailSession = Session.getInstance(props,auth);//session认证,并获得Session实例
			
            ///// 2、获取代理服务器邮件发送器 /////
            transport = sendMailSession.getTransport("smtp");
			sendMailSession.setDebug(true);//这个是跟踪后台消息。打印在控制台
	
			///// 3、生成邮件/////
			Message newMessage = new MimeMessage(sendMailSession); // 创建邮件
			
			///// 3.1、设置邮件主题/////
			newMessage.setSubject("Mail Test Subject");  // 设置邮件主题
			//newMessage.setContent("<b>Hell!</b>","text/html;charset=gb2312");
			
			///// 3.2、设置正文(MINI邮件)/////
			MimeMultipart multipart = new MimeMultipart("related");// 创建MINI邮件(正文)
			BodyPart body = new MimeBodyPart();// 创建MINI邮件组件
			//body.setContent("<b>Hello!</b><br><img src=\"cid:0\">","text/html;charset=gb2312");
			body.setContent(htmlContext,"text/html;charset=gb2312");// 设置MINI邮件正文格式
			multipart.addBodyPart(body);// 将MINI邮件组件添加到MINI邮件中
			
			///// 3.3、附件处理   /////
			for(int i = 0; i < dataSources.length; i++)// 附件处理,根据所提供的符件地址添加符件
			{
				body = new MimeBodyPart(); // 创建MINI邮件组件(用于附件)
				DataSource fds = new FileDataSource(dataSources[i]);
				body.setDataHandler(new DataHandler(fds));
				// 是否在html文件中关联附件,这里匹配正文中img标签,匹配cid:<number>,number从0开始,与符件下标一致
				if(fixDataSource == true)	
					body.setHeader("Content-ID","<"+ (i) +">");	// 将匹配正文中的cid
				multipart.addBodyPart(body);// 将MINI邮件组件添加到MINI邮件中
			}
			// 设置正文(MINI邮件)
			newMessage.setContent(multipart);
			
			////// 4、邮件信息处理 //////
			newMessage.setFrom(new InternetAddress(from));// 设置发件人地址
			newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置收件人地址
			newMessage.setSentDate(new Date()); // 设置发送时间
			//newMessage.setText("<b>Mail Test Content</b>"); 
			
			///// 5、发送邮件 /////
			transport.send(newMessage); 
			return true;
		}
		catch(Exception e)
		{
			e.printStackTrace();
			return false;
		}
	}
	/**
	 * <p>邮件验证规则</p>
	 * @author bing
	 * @version 1.0, 2010-10-16
	 *
	 */
	public class Email_Autherticatorbean extends Authenticator
	{
	    private String m_username = null;
	    private String m_userpass = null;
	    public void setUsername(String username)
	    {
	        m_username = username;
	    }
	    public void setUserpass(String userpass)
	    {
	        m_userpass = userpass;
	    }
	    public Email_Autherticatorbean(String username, String userpass)
	    {
	        super();
	        setUsername(username);
	        setUserpass(userpass);
	    }
	    /**
	     * <p>密码验证</p>
	     * @return PasswordAuthentication 密码验证结果
	     */
	    public PasswordAuthentication getPasswordAuthentication()
	    {
	        return new PasswordAuthentication(m_username,m_userpass);
	    }
	}
}

 

分享到:
评论

相关推荐

    快速邮(Ksemail) 邮件系统 v6.0 build 060630 企业版

    黑白名单功能 、支持别名系统 、支持邮件列表、支持SMTP发信认证 支持用户邮箱空间限额、支持邮件队列管理功能 、支持垃圾邮件、病毒邮件、正常邮件的管理功能、日程安排 、网络书签 、邮件监控 邮件转发、发文管理...

    金笛电子邮件服务器 v3.6.8

    支持标准的SMTP POP3 IMAP4 服务,提供WEB 方式的收发邮件和系统管理功能,支持POP3 SMTP IMAP4 SSL功能,支持POP3 SMTP IMAP4多服务端口,支持HTML 编辑邮件,自动转发,自动回复,POP3代理收件,SMTP 代理发件,...

    快速邮(Ksemail) 邮件系统 v6.0 build 060630 标准版

    黑白名单功能 、支持别名系统 、支持邮件列表、支持SMTP发信认证 支持用户邮箱空间限额、支持邮件队列管理功能 、支持垃圾邮件、病毒邮件、正常邮件的管理功能、日程安排 、网络书签 、邮件监控 邮件转发、发文管理...

    快速邮(Ksemail)企业版.zip

    一款安全易用全功能的邮件服务器软件,它既可以作为局域网邮件服务器、互联网邮件服务器,也可以作为拨号ISDN、ADSL宽带、FTTB、有线通(CableModem) 等接入方式的邮件服务器和...邮件转发、发文管理、支持发信广告管理

    快速邮(Ksemail)标准版.zip

    一款安全易用全功能的邮件服务器软件,它既可以作为局域网邮件服务器、互联网邮件服务器,也可以作为拨号ISDN、ADSL宽带、FTTB、有线通(CableModem) 等接入方式的邮件服务器...邮件转发、发文管理、支持发信广告管理

    NET公共类库[转发]

    Smtp邮件辅助类 SmtpMail.cs 配置Smtp邮件发送及HTM邮件传送 字符串实用类 StringUtil.cs 处理字符串分割,转换,嵌入等方法 类型转换类 TypeParse.cs 各种类型互相转换,如int string bool等 用户实用类 User.cs 登陆,...

    smtpwebrelay:通过简单的javascript调用从静态网页发送电子邮件

    促进对该服务的使用,进行讨论,并在您的站点上添加链接(通过安全转发的电子邮件)。 代码 您发现错误了吗? 您有改善的想法吗? 为什么不在此存储库中打开问题或提交拉动请求以提出更改? 捐 您可能已经猜到了,我...

    restgomail:用Go编写的HTTP-REST Mail网关

    RestGoMail是一个小型守护程序/容器,它能够以JSON数据的形式以HTTP POST的形式接收HTML电子邮件转发请求,对请求进行排队,然后根据设置将指定的邮件发送到SMTP服务器。 编译/安装 服务器配置文件(JSON)-必须传递...

    rss2email:将 RSS 提要转发到您的电子邮件地址,社区维护

    我们强烈建议您在 GitHub 上观看 rss2email 项目,以便了解最新版本、错误修复和功能: ... 弄清楚您将如何发送外发电子邮件。 您在这里有两个选择:使用 SMTP 服务器或本地 sendmail 程序。 所以, 确定您的外发电子

    TCPIP详解--共三卷

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

    asp.net知识库

    体验.net2.0的优雅(3) -- 为您的 SiteMap 添加 控制转发功能 GridView控件使用经验 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! ASP.NET2.0控件一览---标准控件(1) ASP.NET2.0控件一览---标准控件(2) ASP...

    ansible-role-nullmailer:安装nullmailer的角色

    Ansible角色:nullmailer 角色,用于安装 ,这是一个简单的仅用于中继的邮件... 通过nullmailer发送的所有邮件的收件人。 这应该是nullmailer_relay_host接受并转发给它的nullmailer_relay_host 。 nullmailer_rel

    TCP_IP详解卷1

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

    TCPIP详解卷[1].part04

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

    TCPIP详解卷[1].part09

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

    TCPIP详解卷[1].part03

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

    TCPIP详解卷[1].part05

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

    TCPIP详解卷[1].part06

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

    TCP/IP详解part_2

    第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继代理 335 28.2.5 NVT ASCII 337 28.2.6 重试间隔 337 28.3 ...

Global site tag (gtag.js) - Google Analytics