`
cesul
  • 浏览: 31690 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用Commons-mail发送邮件:更合逻辑的实例

阅读更多
先定义mail的一个bean:
public class Mail {
   
    private String toAddress;   // 邮件接收者   
    private String nickname;    // 收件人昵称
    private String subject;   // 邮件主题   
    private String content;   // 邮件内容 
    private String ChartSet;  //字符集
	private Map<String, String> AttachmentsPath;   //附件路径列表 
    
    
    /////setter() and getter()...
}

有了bean后,发送文本形式邮件。发件人在类初始化时完成,然后接下来就可以不断发送而不需再定义。
public class TextMailSender {
	
	private String hostname;
	private String username;
	private String password;
	private String address;
	private Boolean TLS;
	
	public TextMailSender(String hostname, String address, String username, String password, Boolean TLS) {
		this.hostname = hostname;
		this.username = username;
		this.password = password;
		this.address = address;
		this.TLS = TLS;
	}
	
	/**
	 * @throws EmailException 
	 * 
	 * **/
	public void execute(Mail mail) throws EmailException{
		
		SimpleEmail email = new SimpleEmail();
        email.setTLS(TLS);      
        email.setHostName(hostname);  
        email.setAuthentication(username, password); // 用户名和密码  
        email.setFrom(address); // 发送地址
        
        email.addTo(mail.getToAddress()); // 接收地址 
        email.setSubject(mail.getSubject()); // 邮件标题
        email.setCharset(mail.getChartSet());
        email.setMsg(mail.getContent()); // 邮件内容
        email.send();
	}
	
	////
	public static void main(String[] args) {
		TextMailSender sender = new TextMailSender("smtp.qq.com", "cesul@qq.com", "cesul", "******", true);
		
		Mail mail = new Mail();
		mail.setToAddress("cesul@qq.com");
		mail.setSubject("这又是一封测试邮件!");
		mail.setContent("呵呵呵呵呵");
		mail.setChartSet("utf-8");
		try {
			sender.execute(mail);
		} catch (EmailException e) {
			e.printStackTrace();
		}
		System.out.println("Finished");
	}
}


如果需要添加(多个)附件,使用commons-mail的另一个类:
public class AttachmentSender {
	
	private String hostname;  //"SMTP服务器"
	private String username;
	private String password;
	private String address;
	private String nickname;
	private Boolean TLS;
	
	public AttachmentSender(String hostname, String address, String nickname, String username, String password, Boolean TLS) {
		this.hostname = hostname;
		this.nickname = nickname;
		this.username = username;
		this.password = password;
		this.address = address;
		this.TLS = TLS;
	}
	
	/**
	 * @throws UnsupportedEncodingException 
	 * @throws EmailException 
	 * 
	 * **/
	@SuppressWarnings("unchecked")
	public void execute(Mail mail) throws UnsupportedEncodingException, EmailException{

		// Create the email message 
		MultiPartEmail email = new MultiPartEmail(); 
		email.setHostName(hostname); 
		email.setAuthentication(username, password); 
		email.setFrom(address, nickname);   //可以加入发信人称呼
		email.setTLS(TLS);
		
		email.setCharset(mail.getChartSet());
		email.addTo(mail.getToAddress(), mail.getNickname()); 
		email.setSubject(mail.getSubject());
		email.setMsg(mail.getContent()); 
		
		EmailAttachment attachment;
		Iterator<? extends Object> it = mail.getAttachmentsPath().entrySet().iterator(); //附件是多个 ,遍历
		while (it.hasNext()) {  
			Map.Entry<String, String> entry = (Map.Entry<String, String>)it.next();  
			attachment = new EmailAttachment();
			attachment.setPath(entry.getKey());  //键是附件路径
			attachment.setDisposition(EmailAttachment.ATTACHMENT); 
			attachment.setDescription(MimeUtility.encodeWord("附件","UTF-8",null));
			attachment.setName(MimeUtility.encodeWord(entry.getValue(),"UTF-8",null));  //值是附件描述名
			email.attach(attachment);  // add the attachment
		}
		email.send(); // send the email 
	}
	

	public static void main(String[] args) {
		
		AttachmentSender sender = new AttachmentSender("smtp.qq.com", "cesul@qq.com", "陈志钊", "cesul", "******", true);
		
		Mail mail = new Mail();
		mail.setToAddress("cesul@qq.com");
		mail.setNickname("你好");
		mail.setSubject("Here is the picture you wanted");
		mail.setContent("呵呵呵呵呵");
		mail.setChartSet("utf-8");
		
		Map<String, String> attachment = new HashMap<String, String>();
		attachment.put("E:\\Photos\\2010-08-17-0.bmp", "这是你要的图片.bmp");
		attachment.put("E:\\Photos\\2010-07-19-1.bmp", "这也是你要的图片.bmp");  //不要把相同路径的文件发两次
		mail.setAttachmentsPath(attachment);
		
		try {
			sender.execute(mail);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (EmailException e) {
			e.printStackTrace();
		}
		System.out.println("Finished");
	}
}


总结:请参看各“发送类”的构造方法:-)
====================================

要用到的最新jar包下载:

* Commons-email-1.2.zip:
http://commons.apache.org/email/download_email.cgi
* JavaBeans(TM) Activation Framework 1.1.1:
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SimpleBundleDownload
* JavaMail(TM) API 1.4.4 for All Supported Platforms:

https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter
分享到:
评论

相关推荐

    发送邮件及邮件附件java代码实例(支持多附件-群发送)教案资料.docx

    【Java 发送邮件及邮件附件】 在Java编程中,发送邮件及附件是常见的功能,...然而,在实际开发中,通常推荐使用JavaMail API或者第三方库如Apache Commons Email,它们提供了更强大且易于使用的接口来处理邮件的发送。

    Java邮件发送依赖的jar包

    4. 创建`Email`对象:使用Apache Commons Email的`Email`类实例化一个邮件对象,设置收件人、抄送人、密送人、主题和正文。 5. 设置高级选项:如果需要,可以设置邮件的其他属性,如是否启用HTML内容、添加附件、...

    第 5-7 课:综合实战客户管理系统(⼀)1

    - `spring-boot-starter-mail`用于发送邮件。 - `commons-pool2`是Apache Commons提供的对象池,用于优化Redis连接。 6. **系统设计与开发**:在日常工作中,面对这样的需求,开发者需要考虑系统架构、安全性、...

    Apache mail实例

    在实际应用中,使用Apache Commons Email组件发送邮件时,你需要: - **配置邮件服务器**: 首先,你需要一个支持SMTP(Simple Mail Transfer Protocol)的邮件服务器,如163提供的smtp.163.com。此外,还需要一个...

    Java开发的发邮件

    接着,使用`Email`类实例化一个邮件对象,设置邮件内容,最后通过`Transport.send()`方法将邮件发送出去。 总结来说,Java开发的邮件发送涉及了JavaMail API、Apache Commons Email库以及相关依赖,这些工具和库...

    文件上传和邮件发送的java实例

    在Java编程中,文件上传和邮件发送是两个重要的功能,广泛应用于各种系统,如网站、应用程序和服务端逻辑。本文将详细讲解如何使用Java实现这两个功能,并探讨几种不同的邮件发送方式。 首先,文件上传通常涉及到...

    java 邮件 mail 源码 事例 demo

    如果`MailUtil.txt`中包含类似的方法,可能已经封装了发送邮件的逻辑,使其更易于使用和复用。你可以根据`说明.txt`中的指示,将这些代码整合到你的项目中,或者根据自己的需求进行修改。 总的来说,JavaMail API是...

    Spring进阶—如何用Java代码实现邮件发送

    Apache Commons Email库则提供了一种更简洁的方式来发送邮件,它简化了邮件构造和发送的过程,但仍然需要开发者手动配置和管理邮件发送的细节。 Spring框架提供了一种高级的邮件发送抽象层,位于`org.spring...

    Java开发中常用jar包的作用

    在使用`javaMail`发送邮件时,通常需要同时添加`mail.jar`以确保邮件功能的正常运作。 #### ajaxtags-1.2-beta3.jar - **作用**: 提供了Ajax相关的标签库,使得开发者可以在JSP页面中如同使用普通标签一样使用Ajax...

    java邮件发送

    - **创建Transport**:使用`Transport`类发送邮件,调用`Transport.send()`方法。 3. **示例代码**: ```java Properties props = new Properties(); props.put("mail.smtp.host", "smtp.example.com"); props...

    Spring 实现 定时 发送EMAIL

    然后在代码中,你可以通过Spring的依赖注入来获取JavaMailSender实例,并使用它发送邮件: ```java @Component public class EmailService { private final JavaMailSender javaMailSender; private final ...

    邮件发送小例子

    4. **构建HTML内容**:使用`setHtmlMsg()`方法设置邮件的HTML内容。你可以包含文本、图片、链接等元素,以创建美观的布局。 ```java String htmlContent = "&lt;h1&gt;欢迎!&lt;/h1&gt;&lt;p&gt;这是一封HTML格式的邮件示例。&lt;/p&gt;"; ...

    重要知识java发邮件(word2003).pdf

    Java发送邮件是编程中常见的一种任务,特别是在自动化脚本或者服务通知中经常使用。...如果需要更高级的功能,如多邮件发送、定时发送等,可以通过扩展`SendMail`类或使用第三方库如Apache Commons Email来实现。

    webservice_axis相关jar包

    2. **mail-1.4.7.jar**:此文件为JavaMail API的实现,用于支持发送邮件功能,某些Web服务可能需要通过邮件进行通信或通知。 3. **axis-wsdl4j-1.5.1.jar**:Wsdl4j库,用于解析和操作WSDL文件,是Axis生成服务端...

    javamail.zip

    2. **创建MimeMessage**:使用`Session`实例创建`MimeMessage`对象,设置发件人、收件人、主题和正文内容。 3. **配置SMTP Transport**:根据邮件服务器的要求,可能需要配置SSL/TLS安全连接。使用`Transport`类的`...

    webservice根据wsdl生成客户端代理类所需jar包

    在完成代理类生成后,开发者就可以通过实例化这些类并调用其方法来与Web服务进行交互,从而执行诸如发送请求、接收响应等操作。这大大简化了Web服务客户端的开发工作,使得开发人员能够专注于业务逻辑,而不是底层的...

    Axis 把WSDL生成JAVA类

    2. **执行转换命令**:使用`WSDL2Java`工具,这是一个位于`org.apache.axis.wsdl`包下的类,用于将WSDL文件转换为Java源代码。命令行如下所示: ``` java -classpath classpath org.apache.axis.wsdl.WSDL2Java -o...

    Java常用类库Apache Commons工具类说明及使用实例详解

    9.Email:提供了Java发送邮件的工具类。例如: ```java import org.apache.commons.mail.Email; import org.apache.commons.mail.SimpleEmail; Email email = new SimpleEmail(); email.setHostName("smtp.gmail....

Global site tag (gtag.js) - Google Analytics