`

通过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);
	    }
	}
}

 

分享到:
评论

相关推荐

    基于smtp 和pop3协议的邮件转发器

    构建一个基于SMTP和POP3的邮件转发器,你需要实现以下功能: 1. **邮件接收**:使用POP3协议定期检查用户指定的邮箱,获取新邮件。 2. **邮件解析**:解析接收到的邮件内容,包括邮件头(如发件人、收件人、主题等...

    c#实现SMTP发送邮件功能

    ### C# 实现 SMTP 发送邮件功能 ...通过以上步骤,我们已经成功实现了使用 C# 语言结合 SMTP 协议发送邮件的功能。这项技术对于构建自动化任务、用户通知等功能具有重要意义。希望本文能对你有所帮助。

    实现后台自动转发邮件

    // 实现邮件转发逻辑 try { // 1. 获取待转发的邮件 // 2. 设置转发目标 // 3. 使用JavaMail发送邮件 } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ...

    php通过smtp发邮件的类.zip

    为了在PHP中实现SMTP邮件发送,我们可以使用特定的类库,这里提到的是"php通过smtp发邮件的类.zip",它提供了一个PHP类,使得通过SMTP服务器发送邮件变得更加简单。下面我们将深入探讨这个主题。 首先,让我们了解...

    用Java Socket实现SMTP邮件发送

    总的来说,通过Java Socket实现SMTP邮件发送涉及到网络编程、SMTP协议理解、异常处理等多个知识点。这种技术在日常工作中非常实用,可以方便地集成到各种自动化任务或系统中,如定时发送报告、系统通知等。然而,...

    smtp邮件发送客户端

    C#编程语言提供了一种简单的方法来实现SMTP客户端,可以方便地通过异步编程模型发送邮件。在本例中,我们将探讨如何使用C#的`System.Net.Mail`命名空间中的类来实现一个SMTP邮件发送客户端。 首先,我们需要了解`...

    SMTP 邮件发送模块(源码)

    在实际应用中,开发者可以利用这个SMTP邮件发送模块,通过提供适当的参数(如发件人邮箱、收件人邮箱、邮件内容等),就能实现程序自动发送邮件的功能。通过深入理解和学习源码,不仅可以了解SMTP邮件发送的原理,还...

    基于smtp发送邮件

    当用户通过邮件客户端(如Outlook或Gmail网页版)撰写邮件后,SMTP服务器接收这些邮件,并根据邮件中的收件人地址,将邮件转发到相应的邮件接收服务器。整个过程通常涉及三个主要步骤:连接、验证和传输。 1. **...

    smtp电子邮件的客服端程序

    例如,处理HTML邮件需要解析HTML内容并渲染为用户友好的格式,而附件则涉及到二进制数据的编码和解码。 总结来说,SMTP电子邮件客户端程序是通过网络socket编程实现的,它使用SMTP协议与服务器交互,发送和接收邮件...

    基于SMTP的邮件发送程序设计

    3. **外发程序**:负责将本地程序提交的邮件转发至目的地。通常运行在邮件服务器上。 4. **接收程序**:接收来自外发程序的邮件,并将其交付给目标用户的邮箱。 这些组件通过TCP/IP协议族中的SMTP协议相互协作,...

    smtp邮件发送

    通过SMTP,用户可以通过一个邮件客户端将邮件发送到邮件服务器,然后由邮件服务器转发到收件人的邮箱。在这个主题中,我们将深入探讨如何使用SMTP进行邮件发送,以及相关示例代码。 首先,我们需要了解SMTP的工作...

    邮件客户端的html格式邮件解析规则系列教程(一)

    - **标准化显示**:Outlook 2007之前,收件箱和回复/转发的HTML邮件分别使用IE和Word的渲染引擎,导致显示不一致。Outlook 2007采用统一的渲染引擎,以实现更一致的用户体验。 2. **Outlook 2007不支持的HTML和CSS...

    发送邮件发送,先提一下SMTP

    SMTP协议属于TCP/IP协议簇的一部分,其作用在于帮助每台计算机在发送或转发邮件时确定下一个目标。 #### 二、系统.Web.Mail库中的邮件发送功能 System.Web.Mail类库提供了三个核心类:`SmtpMail`、`MailMessage` 和...

    smtp.rar_asp.net_asp.net smtp_asp.net 邮件_csharp smtp_邮件 发送 asp.n

    SMTP服务器接收邮件,并负责将它们转发到目的地。在ASP.NET中,我们通常使用System.Net.Mail命名空间中的类来实现SMTP邮件发送。 1. **创建邮件对象**: 使用`MailMessage`类创建一个邮件实例,设置发件人、收件人...

    smtp协议代码示例集合

    SMTP主要用于将邮件从一个邮件服务器传递到另一个邮件服务器,而不是直接从用户到用户,因为用户的电子邮件客户端通常使用SMTP来与邮件服务器通信,然后由邮件服务器负责将邮件转发到目的地。 在C++编程环境中,...

    邮件发送-SMTP

    通过阅读这份报告,你可以了解到如何将SMTP理论知识转化为实际操作,同时可能还有关于错误处理、附件添加、HTML邮件等内容的讲解。 总的来说,Java SMTP邮件发送是一个实用且常见的技能,适用于自动化通知、系统...

    SMTP.rar_邮件发送 c++ VS

    通过深入理解SMTP的工作机制,可以实现更复杂的功能,如附件上传、HTML邮件发送、多收件人管理等。 总之,"SMTP.rar_邮件发送 c++ VS"提供的源代码为学习和实践SMTP邮件发送提供了宝贵资源。通过研究这个程序,...

    smtp.rar_SMTP代码_SMTP服务器_java smtp_smtp

    学习者可以通过分析代码了解如何创建监听套接字、处理输入输出流,以及如何将邮件存储或转发。 4. **身份验证**:在实际应用中,SMTP服务器可能需要进行身份验证,防止未经授权的用户发送垃圾邮件。这通常涉及到...

    smtp.class.rar_PHP邮件群发_php mail_邮件群发php

    SMTP通常用于从邮件客户端发送邮件到邮件服务器,或从一个邮件服务器转发邮件到另一个邮件服务器。 ### PHP `mail()` 函数 PHP内置的`mail()`函数是用于发送简单邮件的最基础方式。其基本语法如下: ```php bool ...

Global site tag (gtag.js) - Google Analytics