`
rekoe.net
  • 浏览: 8523 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Mail 发邮件

阅读更多
Mail类
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Part;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.URLName;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import com.sun.mail.smtp.SMTPTransport;

public class Mail {
	private final String SSL_FACTORY  =  "javax.net.ssl.SSLSocketFactory";
	private String host=null;
	private int port=25;
	private String auth=null;
	private String username=null;
	private String password=null;
	private boolean mailusername=false;
	private Session session = null;
	ThreadPoolExecutor executor = null;
	{
		executor = new ThreadPoolExecutor(1, Integer.MAX_VALUE, 60,TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(5));
	}
	public Mail(Map<String,String> mails) {
		this.host=mails.get("server");
		int tempPort=Common.toDigit(mails.get("port"));
		if(tempPort>0){
			this.port=tempPort;
		}
		this.auth=mails.get("auth");
		this.username=mails.get("auth_username");
		this.password=mails.get("auth_password");
		if("1".equals(mails.get("mailusername"))){
			this.mailusername=true;
		}
	}
	public Mail(String host,int port,String auth,String username,String password,String mailusername) {
		this.host=host;
		if(port>0){
			this.port=port;
		}
		this.auth=auth;
		this.username=username;
		this.password=password;
		if("1".equals(mailusername)){
			this.mailusername=true;
		}
	}

	private synchronized void createSession() {
		  Properties mailProps = new Properties();
		  mailProps.setProperty("mail.transport.protocol", "smtp"); 
		  mailProps.setProperty("mail.smtp.host",  host);
		  mailProps.setProperty("mail.smtp.port", String.valueOf(port));
		  if("smtp.gmail.com".equals(host)){
			   mailProps.setProperty("mail.smtp.socketFactory.class",  SSL_FACTORY);
			   mailProps.setProperty("mail.smtp.socketFactory.fallback",  "false");
			   mailProps.setProperty("mail.smtp.socketFactory.port",String.valueOf(port));
		  }
		   if ("1".equals(auth)) {
				mailProps.put("mail.smtp.auth", "true");
			}
		session = Session.getDefaultInstance(mailProps,
				new Authenticator() {
					protected PasswordAuthentication getPasswordAuthentication() {
						return new PasswordAuthentication(username, password);
					}
				});
	}

	private MimeMessage createMimeMessage() {
		if (session == null) {
			createSession();
		}
		return new MimeMessage(session);
	}

	public String sendMessage(String from,String toEmail,String subject, String textBody, String htmlBody) {
		String result=null;
		try {
			String encoding = MimeUtility.mimeCharset(JspRunConfig.CHARSET);
			MimeMessage message = createMimeMessage();
			String toEmails[] = toEmail.split(",");
			Address to[] = new Address[toEmails.length];
			for (int i = 0; i < toEmails.length; i++) {
				String sTo=toEmails[i];
				if(sTo.matches("^.*<.*>$")){
					int index=sTo.indexOf("<");
					to[i] = new InternetAddress(sTo.substring(index+1,sTo.length()-1),mailusername?sTo.substring(0, index):"", encoding);
				}else{
					to[i] = new InternetAddress(sTo, "", encoding);
				}
			}
			String fromName=null;
			String fromEmail;
			if(from.matches("^.*<.*>$")){
				int index=from.indexOf("<");
				if(mailusername){
					fromName=from.substring(0, index);
				}
				fromEmail=from.substring(index+1,from.length()-1);
			}else{
				fromEmail=from;
			}
			Address fromAddress = new InternetAddress(fromEmail,fromName!=null?fromName:"", encoding);

			message.setHeader("Date", Common.gmdate("EEE, dd MMM yyyy HH:mm:ss Z", (int)(System.currentTimeMillis()/1000), "0"));
			message.setHeader("Content-Transfer-Encoding", "8bit");
			message.setRecipients(Message.RecipientType.TO, to);
			message.setFrom(fromAddress);
			message.setSubject(subject, encoding);
			MimeMultipart content = new MimeMultipart("alternative");
			if (textBody != null && htmlBody != null) {
				MimeBodyPart text = new MimeBodyPart();
				text.setText(textBody, encoding);
				text.setDisposition(Part.INLINE);
				content.addBodyPart(text);
				MimeBodyPart html = new MimeBodyPart();
				html.setContent(htmlBody, "text/html;charset="+encoding);
				html.setDisposition(Part.INLINE);
				content.addBodyPart(html);
			} else if (textBody != null) {
				MimeBodyPart text = new MimeBodyPart();
				text.setText(textBody, encoding);
				text.setDisposition(Part.INLINE);
				content.addBodyPart(text);
			} else if (htmlBody != null) {
				MimeBodyPart html = new MimeBodyPart();
				html.setContent(htmlBody, "text/html;charset="+encoding);
				html.setDisposition(Part.INLINE);
				content.addBodyPart(html);
			}
			message.setContent(content);
			message.setDisposition(Part.INLINE);
			addToTask(message);
		} catch (Exception e) {
			result=e.getMessage();
		}
		return result;
	}

	private void addToTask(MimeMessage message) {
		if (message != null) {
			sendMessages(Collections.singletonList(message));
		} else {
			System.out.println("Cannot add null email message to queue.");
		}

	}

	private void sendMessages(Collection<MimeMessage> messages) {
		if (messages.size() == 0) {
			return;
		}
		executor.execute(new EmailTask(messages));
	}

	private class EmailTask implements Runnable {
		private Collection<MimeMessage> messages;
		public EmailTask(Collection<MimeMessage> messages) {
			this.messages = messages;
		}
		public void run() {
			try {
				sendMessages();
			} catch (MessagingException me) {
				int timestamp =(int)(System.currentTimeMillis()/1000);
				Log.writelog("errorlog", timestamp, timestamp+"\tSMTP\t\t("+host+":"+port+") CONNECT - Unable to connect to the SMTP server");
			}
		}
		public boolean sendMessages() throws MessagingException {
			Transport transport = null;
			try {
				URLName url = new URLName("smtp", host, port, "", username,password);
				transport = new SMTPTransport(session, url);
				transport.connect(host, port, username, password);
				for (MimeMessage message : messages) {
					transport.sendMessage(message, message.getRecipients(MimeMessage.RecipientType.TO));
				}
				return true;
			} finally {
				if (transport != null) {
					transport.close();
				}
			}
		}
	}
}

调用方法:
Mail mail=new Mail(host, port, auth, auth_username, auth_password,"1");
			String[] test_tos=test_to.split(",");
			String alertmsg = mail.sendMessage(test_from, test_tos[0], title, getMessage(request, "a_setting_mailcheck_method_1")+"\n\n\n"+textBody, null);
			alertmsg = mail.sendMessage(test_from, test_to, title,getMessage(request, "a_setting_mailcheck_method_2")+"\n\n\n"+textBody, null);
			if (alertmsg==null) {
				alertmsg=getMessage(request,"a_setting_mailcheck_success_1")+" "+title+" "+getMessage(request, "a_setting_mailcheck_success_2");
			}else {
				alertmsg=getMessage(request, "a_setting_mailcheck_error")+alertmsg;
			}


方法:getMessage()
private MessageResources mr=null;
	public String getMessage(HttpServletRequest request,String key,String... args){
		if(key==null||key.length()==0){
			return null;
		}
		if(mr==null){
			mr=getResources(request);
		}
		Locale locale=getLocale(request);
		String message=null;
		if(args!=null&&args.length>0){
			message= mr.getMessage(locale,key,args);
		}else{
			message= mr.getMessage(locale,key);
		}
		return message;
	}
分享到:
评论

相关推荐

    java mail发邮件

    在你提供的压缩包文件中,包含了三个关键元素:activation.jar、mail.jar以及SendMail.java,这些都是Java Mail发邮件所需的基本组件。 `activation.jar` 是JavaBeans Activation Framework (JAF) 的一部分,它是...

    java mail 发邮件 demo程序

    这个“java mail 发邮件 demo程序”是为了演示如何使用JavaMail API发送电子邮件而创建的一个简单示例。在这个DEMO程序中,我们将深入探讨JavaMail API的核心概念以及如何构建一个实际的邮件发送功能。 首先,...

    php mail 发邮件加附件

    总结来说,`php mail 发邮件加附件`涉及到的知识点包括: 1. PHP `mail()` 函数的使用。 2. 自定义PHP邮件类的设计与实现,以扩展`mail()` 的功能。 3. 使用SMTP服务器进行邮件发送。 4. 添加和处理邮件附件。 5. ...

    java编写的mail发邮件

    Java 编写的Mail发邮件是Java开发者经常遇到的一项任务,主要涉及到JavaMail API的使用。JavaMail API是一个开源的Java库,它允许开发者在Java应用程序中实现SMTP(简单邮件传输协议)和其他邮件协议来发送和接收...

    springboot 整合spring-boot-starter-mail 发邮件.rar

    springboot 整合spring-boot-starter-mail 发邮件

    用java mail发邮件源码,支持多种邮局,支持单发和群发

    3. **Message对象**:`Message`类代表一封邮件,创建`Message`实例并设置其属性,如主题、发件人、收件人、抄送人等: ```java Message message = new MimeMessage(session); message.setFrom(new Internet...

    jmail发邮件,.net自带mail发邮件

    在使用Jmail时,你需要先将其安装到项目中,然后通过调用其提供的方法,如`JMail.Send()`,设置好邮件的相关属性(如发件人、收件人、主题、正文等),就可以完成邮件的发送。Jmail还支持HTML格式的邮件、附件发送...

    SpringMail发邮件

    SpringMail是Spring框架的一个扩展,它为Java应用提供了一个简单且强大的邮件发送功能。通过集成SpringMail,开发者可以轻松地在应用程序中实现电子邮件的发送,无论是普通的文本邮件、HTML格式的邮件,还是带有附件...

    java 基于javax.mail的邮件发送测试工具

    基于javax.mail的邮件发送测试工具

    DBA 监控巡检脚本发邮件,需要先打通mail发邮件

    监控alert log日志出现ora错误,表空间利用率大于90,rac日志,DG OGG 日志,会看懂shell的可以自己更改代码

    java发Email和mail.jar

    也许很多 同道遇到和我一样的问题,建了个web项目,写一堆代码,结果一运行老是报错!!!上网查了查,知道了原因,修改了还是不行。...如果还没有成功,你可以给我发邮件973203075@qq.com,我可以把项目也给你!!

    Linux shell同时发送邮件给多个人.txt

    Linux shell发邮件如何才能同时发送邮件给多个人???这里揭晓答案

    使用JAVAMail代发邮件

    这个类称为 MailInfo,包含了邮件的各种信息,例如邮件服务器的主机名和端口号、邮件发送者的地址、邮件接收者的地址、邮件主题、邮件内容、邮件附件等。 在 MailInfo 类中,我们定义了多个成员变量,用于存储邮件...

    整合最新的PEAR MAIL发中文邮件乱码处理

    之前网上下载了一些PEAR MAIL 发邮件的代码,发现版本还是2004年版的,去官网看了一下,所有的内容都更新了。所以下载了,整合一份,经测试,还可以把。里面包含了测试文件(其中包括mime插件的),只需简单设置即可...

    使用springMail发送带附件的email

    SpringMail是一个在Java应用中发送电子邮件的库,它利用了JavaMail API的简便性和灵活性。在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail ...

    利用Bean发邮件.rar_bean mail_发邮件

    "利用Bean发邮件"是指通过Java的JavaMail API结合Spring框架中的Bean管理来实现邮件发送功能。这个压缩包文件可能包含了相关教程或者示例代码,如"www.pudn.com.txt"可能是从某个论坛或资源网站下载的资料链接,而...

    javax.mail发送邮件

    根据提供的文件信息,我们可以深入探讨如何使用`javax.mail`包中的类来实现通过QQ邮箱服务发送电子邮件的功能。这里的关键步骤包括设置SMTP服务器、配置安全连接(如SSL/TLS)、创建邮件会话、构建邮件对象以及最终...

    phpmail 类 发邮件实例

    在本实例中,我们将深入探讨如何使用 PHPMailer 来实现发邮件功能。 首先,`class.phpmailer.php` 和 `class.smtp.php` 是 PHPMailer 的核心文件。前者包含了 PHPMailer 类的所有方法和属性,后者则实现了 SMTP ...

    Linux发邮件之mail命令详解

    **Linux发邮件之mail命令详解** 在Linux操作系统中,发送电子邮件是一种常见的通信方式,而mail命令则是一个内置的命令行工具,用于收发邮件。本文将深入探讨如何使用mail命令来发送邮件,包括配置SMTP服务器、发送...

    Mail API实现发送邮件

    Mail API是开发者用于程序化发送邮件的接口,它可以让我们在应用程序中轻松地添加邮件功能。本篇将详细讲解如何利用Mail API实现发送邮件的功能。 首先,我们需要了解的是Mail API的基本概念。Mail API是一种允许...

Global site tag (gtag.js) - Google Analytics