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;
}
分享到:
相关推荐
在你提供的压缩包文件中,包含了三个关键元素:activation.jar、mail.jar以及SendMail.java,这些都是Java Mail发邮件所需的基本组件。 `activation.jar` 是JavaBeans Activation Framework (JAF) 的一部分,它是...
这个“java mail 发邮件 demo程序”是为了演示如何使用JavaMail API发送电子邮件而创建的一个简单示例。在这个DEMO程序中,我们将深入探讨JavaMail API的核心概念以及如何构建一个实际的邮件发送功能。 首先,...
总结来说,`php mail 发邮件加附件`涉及到的知识点包括: 1. PHP `mail()` 函数的使用。 2. 自定义PHP邮件类的设计与实现,以扩展`mail()` 的功能。 3. 使用SMTP服务器进行邮件发送。 4. 添加和处理邮件附件。 5. ...
Java 编写的Mail发邮件是Java开发者经常遇到的一项任务,主要涉及到JavaMail API的使用。JavaMail API是一个开源的Java库,它允许开发者在Java应用程序中实现SMTP(简单邮件传输协议)和其他邮件协议来发送和接收...
springboot 整合spring-boot-starter-mail 发邮件
3. **Message对象**:`Message`类代表一封邮件,创建`Message`实例并设置其属性,如主题、发件人、收件人、抄送人等: ```java Message message = new MimeMessage(session); message.setFrom(new Internet...
在使用Jmail时,你需要先将其安装到项目中,然后通过调用其提供的方法,如`JMail.Send()`,设置好邮件的相关属性(如发件人、收件人、主题、正文等),就可以完成邮件的发送。Jmail还支持HTML格式的邮件、附件发送...
SpringMail是Spring框架的一个扩展,它为Java应用提供了一个简单且强大的邮件发送功能。通过集成SpringMail,开发者可以轻松地在应用程序中实现电子邮件的发送,无论是普通的文本邮件、HTML格式的邮件,还是带有附件...
基于javax.mail的邮件发送测试工具
监控alert log日志出现ora错误,表空间利用率大于90,rac日志,DG OGG 日志,会看懂shell的可以自己更改代码
也许很多 同道遇到和我一样的问题,建了个web项目,写一堆代码,结果一运行老是报错!!!上网查了查,知道了原因,修改了还是不行。...如果还没有成功,你可以给我发邮件973203075@qq.com,我可以把项目也给你!!
Linux shell发邮件如何才能同时发送邮件给多个人???这里揭晓答案
这个类称为 MailInfo,包含了邮件的各种信息,例如邮件服务器的主机名和端口号、邮件发送者的地址、邮件接收者的地址、邮件主题、邮件内容、邮件附件等。 在 MailInfo 类中,我们定义了多个成员变量,用于存储邮件...
之前网上下载了一些PEAR MAIL 发邮件的代码,发现版本还是2004年版的,去官网看了一下,所有的内容都更新了。所以下载了,整合一份,经测试,还可以把。里面包含了测试文件(其中包括mime插件的),只需简单设置即可...
SpringMail是一个在Java应用中发送电子邮件的库,它利用了JavaMail API的简便性和灵活性。在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail ...
"利用Bean发邮件"是指通过Java的JavaMail API结合Spring框架中的Bean管理来实现邮件发送功能。这个压缩包文件可能包含了相关教程或者示例代码,如"www.pudn.com.txt"可能是从某个论坛或资源网站下载的资料链接,而...
根据提供的文件信息,我们可以深入探讨如何使用`javax.mail`包中的类来实现通过QQ邮箱服务发送电子邮件的功能。这里的关键步骤包括设置SMTP服务器、配置安全连接(如SSL/TLS)、创建邮件会话、构建邮件对象以及最终...
在本实例中,我们将深入探讨如何使用 PHPMailer 来实现发邮件功能。 首先,`class.phpmailer.php` 和 `class.smtp.php` 是 PHPMailer 的核心文件。前者包含了 PHPMailer 类的所有方法和属性,后者则实现了 SMTP ...
**Linux发邮件之mail命令详解** 在Linux操作系统中,发送电子邮件是一种常见的通信方式,而mail命令则是一个内置的命令行工具,用于收发邮件。本文将深入探讨如何使用mail命令来发送邮件,包括配置SMTP服务器、发送...
Mail API是开发者用于程序化发送邮件的接口,它可以让我们在应用程序中轻松地添加邮件功能。本篇将详细讲解如何利用Mail API实现发送邮件的功能。 首先,我们需要了解的是Mail API的基本概念。Mail API是一种允许...