/**
* 發送郵件
* @param req HTTP伺服器請求
* @return HashMap 返回值
* @throws Exception
*/
public HashMap sendEmail( HttpServletRequest req ) throws Exception
{
//返回值
HashMap retMap = new HashMap();
//是否發送成功
String ok_fail = "";
//發送成功的郵件
String validEmail = "";
//發送失敗的郵件
String invalidEmail = "";
//路徑
String severPath = "http://" + req.getServerName() + ":"
+ req.getServerPort()+ req.getContextPath()+"/";
//圖片格式
String imgStart = "<IMG SRC='" + severPath ;
String imgSize1 = "' width=220 heigh=160 >";
String imgSize2 = "' width=50 heigh=50 >";
//郵件以html格式發送,字符集為utf-8
String htmlStart =
"<HTML><meta http-equiv=Content-Type content=text/html;charset=utf-8>";
String htmlEnd = "</HTML>";
//取郵件服務器資料
ResourceBundle actionDB = ResourceBundle.getBundle("smtpdata");
String SmtpServer= actionDB.getString("SmtpServer1");
String smtpUser = actionDB.getString("SmtpUser1");
String SmtpPwd = actionDB.getString("SmtpPwd1");
//經銷商為空時
if ( "".equals(StringUtil.toStr(SessionUtil.getDealerId(req),"")) )
{
SmtpServer= actionDB.getString("SmtpServer2");
smtpUser = actionDB.getString("SmtpUser2");
SmtpPwd = actionDB.getString("SmtpPwd2");
}
System.out.println("郵件服務器資料如下:");
System.out.println("SmtpServer = "+SmtpServer);
System.out.println("smtpUser = "+smtpUser);
System.out.println("SmtpPwd = "+SmtpPwd);
//取發送人地址
String fromEmail = StringUtil.toStr(SessionUtil.getUserEmail(req));
//發信人名字
String NickName = StringUtil.toStr(req.getParameter("NickName"));
//取編號
String EDrfnbr = StringUtil.toStr(req.getParameter("EDrfnbr"));
//是否寄定期電子郵件
String ESpaper = StringUtil.toStr(req.getParameter("ESpaper"));
//取收件人地址
String toEmails = emailCorrect(new String(req.getParameter("emailList")));
//取信件主旨
String subject = StringUtil.toStr(req.getParameter("EStitle"));
//取信件內容
String Content = new String(req.getParameter("EScontent")).trim();
//取圖片
String ESpic = StringUtil.toStr(req.getParameter("ESpic"));
//取個人資訊
String signature = StringUtil.toStr(req.getParameter("signature"));
//取附圖
String pic = StringUtil.toStr(req.getParameter("pic"));
//是否使用個人化TITLE
String PersonalizedTitle = StringUtil.toStr
(req.getParameter("CkbPersonalizedTitle"));
PersonalizedTitle = "on".equals(PersonalizedTitle)?"Y":"N";
//如果有圖片
ESpic = "".equals(ESpic)?"":imgStart + ESpic + imgSize1;
//如果有附圖
pic = "".equals(pic)?"":imgStart + pic + imgSize2;
//附文
String HContent ="<BR>" + ESpic + "<BR>" + signature + "<BR>" + pic +"<BR>";
//取屬性
Properties props = new Properties();
//添加SMTP的服務器
props.put("mail.smtp.host", SmtpServer);
props.put("mail.transport.protocol", "smtp");
//props.put("mail.smtp.connectiontimeout", "10000");
//這是延時
//props.put("mail.smtp.timeout", "10000");
//如果smtp有加驗證需要在后面加上true!
props.put("mail.smtp.auth", "true");
// 加驗證
EmailAuthenticator auth = new EmailAuthenticator(smtpUser, SmtpPwd);
//得到session的配置文件与驗證加進去
javax.mail.Session sendMailSession =
javax.mail.Session.getDefaultInstance(props,auth);
//需要調試可以用下面的這行代碼
//sendMailSession.setDebug(true);
javax.mail.internet.MimeMessage msg =
new javax.mail.internet.MimeMessage(sendMailSession);
//取得發送人地址
javax.mail.internet.InternetAddress fromAddress =
new javax.mail.internet.InternetAddress(fromEmail);
//設定發送人地址
msg.setFrom(fromAddress);
//設定郵件發送日期
msg.setSentDate(new java.util.Date());
//設定郵件主題
msg.setSubject( subject, "UTF-8");
//建立
javax.mail.Transport transport = sendMailSession.getTransport("smtp");
try
{
//連結
transport.connect(SmtpServer, smtpUser, SmtpPwd);
//分解收件人地址
String[] toAddress = toEmails.split(",");
System.out.println("要發送的EMAIL共有: " +toAddress.length +" 個");
System.out.println("發送的NAME和EMAIL如下: ");
//循環發送
for( int i=0; i< toAddress.length; i++ )
{
String toAddress_i = toAddress[i];
//分解姓名與email,並驗證是否為email
String[] nemail = name_email(toAddress_i);
String toName_i = nemail[0];
String toEmail_i = nemail[1];
System.out.println("NAME_"+i+" : "+toName_i);
System.out.println("EMAIL_"+i+" : "+toEmail_i);
//姓名與email相同,說明不是email地址
if ( toName_i.equals(toEmail_i) )
{
invalidEmail += toAddress[i];
invalidEmail += ",";
}
//如果是email地址
else
{
//加入收件地址列
msg.setRecipient(javax.mail.Message.RecipientType.TO,
new javax.mail.internet.InternetAddress(toEmail_i));
String Content_1 = " " + Content;
//如果是個人化TITLE
if ( "Y".equals(PersonalizedTitle) )
{
//Dear {收信人}:
String Ptitle = "Dear " + toName_i + ":<BR>" ;
Content_1 = Ptitle + " " + Content;
}
//郵件內容
msg.setContent(htmlStart + Content_1 + HContent + htmlEnd,
"text/html;charset=utf-8");
// 保存
msg.saveChanges();
// 發送
try
{
transport.send(msg);
//更新成功郵件列表
validEmail += toAddress[i];
validEmail += ",";
}
//例外(email地址不存在時)
catch ( SendFailedException e1)
{
//更新失敗郵件列表
invalidEmail += toAddress[i];
invalidEmail += ",";
}
}
}
//調整
validEmail = emailCorrect(validEmail);
invalidEmail = emailCorrect(invalidEmail);
//成功個數
int validNum = "".equals(validEmail)?0:validEmail.split(",").length;
//失敗個數
int invalidNum = "".equals(invalidEmail)?0:invalidEmail.split(",").length;
System.out.println("發送成功:"+validNum +" 個");
System.out.println("發送失敗"+invalidNum +" 個");
System.out.println("發送成功的email:"+validEmail);
System.out.println("發送失敗的email"+invalidEmail);
//如果全部失敗
if ( invalidNum == toAddress.length )
{
ok_fail = "fail";
}
//如果有成功
else
{
//全部成功
if ( validNum == toAddress.length )
ok_fail = "ok";
//部分成功
else
ok_fail = "both";
//新增郵件發送記錄
if ( insertData(req ,EDrfnbr,subject,Content, ESpaper, NickName) )
System.out.println("信件寄送記錄表NS_EDM0427_SENDLOG新增成功!");
else System.out.println("信件寄送記錄表NS_EDM0427_SENDLOG新增失敗!");
}
}
//例外
catch( Exception e )
{
//設置返回值
ok_fail = "auth_fail";
e.printStackTrace();
throw e;
}
//關閉連結,把值傳回
finally
{
transport.close();
}
//返回值
retMap.put("Mes",ok_fail);
retMap.put("validEmail",replace(validEmail));
retMap.put("invalidEmail",replace(invalidEmail));
return retMap;
}
以下代碼是郵件驗證時需用到的一個類:
package MyEmailTest;
import javax.mail.PasswordAuthentication;
/**
* @author Administrator
*
*/
public class MyAuthenticator extends javax.mail.Authenticator
{
private String strUser;
private String strPwd;
public MyAuthenticator(String user, String password)
{
this.strUser = user;
this.strPwd = password;
}
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(strUser, strPwd);
}
}
可參考:
http://blog.csdn.net/herrapfel/archive/2007/11/06/1869823.aspx
分享到:
相关推荐
标题"java_email 代码"暗示我们将探讨如何使用Java进行电子邮件的编程。JavaMail API包含了许多关键组件,如`Session`、`Message`、`Transport`和`MimeMessage`等,它们是构建邮件系统的核心。 1. **Session**: 这...
Java Email 是一种在Java应用程序中发送和接收电子邮件的机制,主要通过JavaMail API来实现。这个"java-email.rar"文件包含了一个完整的Java Email客户端代码示例,帮助开发者理解和实现自己的邮件功能。 JavaMail ...
Java Email Jar是Java平台上用于发送和接收电子邮件的库,它主要依赖于两个核心组件:`javax.mail`和`javax.activation`。在提供的压缩包文件中,我们看到了以下几个关键的JAR文件: 1. `mail-1.4.1.jar`:这是Java...
这个"java_email"项目可能就是一个简单的Java程序示例,用于演示如何通过代码发送邮件,并且在"testEmail"这个子文件中包含了相关的测试代码或配置。 JavaMail API是Java平台上的一个开源库,它提供了一组接口和类...
java6string源码 简单的 Java 邮件 Simple Java Mail 是最简单的 Java 轻量级邮件库,同时能够发送复杂的电子邮件,包括(!), , , , , 乃至和与属性覆盖, 和工具。 只需发送您的电子邮件,无需处理。 Simple Java ...
这个名为"jsp-email.rar_email send java jsp_jsp email_jsp 邮件_邮件 jsp_邮件 附件"的压缩包包含了一个简单的示例,通过Servlet辅助JSP来完成邮件发送任务。 1. **邮件发送基础** 在Java中,我们通常使用...
Log.e("Email", "邮件发送失败: " + e.getMessage()); } } ``` 以上代码演示了如何在Android应用中使用JavaMail API发送邮件的基本步骤。注意替换示例中的邮箱地址和密码,以匹配你的实际环境。此外,还可以根据...
本篇文章将深入探讨如何在Java环境中处理这两种格式,特别是如何使用Java来解析VCF文件,并将数据转换为CSV格式。 CSV是一种简单但实用的数据交换格式,它以逗号分隔每个字段,每一行代表一条记录。在Java中处理CSV...
System.out.println("Corporate Email: " + corporateEmail); } ``` ### 4. Swing 组件类型 #### 知识点解析: 在Java GUI编程中,Swing组件分为轻量级和重量级两种类型: - **a. 轻量级组件响应性和性能更快**...
message.setText("Hello, this is a test email!"); Transport.send(message); } catch (MessagingException e) { e.printStackTrace(); } ``` 在处理更复杂的邮件需求时,例如包含HTML内容、附件、多部分消息...
标题中的"email_javaemail_library_"暗示我们将讨论的是一个专门针对Java平台的邮件库。在Java中,最常用的邮件库之一是JavaMail API,它是一个开放源代码的API,支持多种邮件协议,包括SMTP、POP3和IMAP。 ...
在web开发中,使用java发送email,需要加入两个jar包。在普通的java程序中可能不需要加入。 但在web中没加入会抛 javax.mail.Authenticator not Founder或java.lang.reflect.InvocationTargetException
Java邮件编程是Java开发中的一个重要领域,特别是在企业级应用中,用于系统间的自动化通信或向用户发送通知。在"Kban6.zip"压缩包中,我们可以看到一系列与Java电子邮件功能实现相关的源代码文件,以及一些可能的...
这个名为"java发送Email_群发email.rar"的压缩包文件很可能包含了关于如何使用Java进行邮件发送,特别是群发邮件的相关教程或代码示例。 在Java中,发送电子邮件主要依赖于JavaMail API。这是一个强大的库,它提供...
Java_squigly Filter是Jackson库的一个扩展,用于在序列化JSON对象时提供更精细的控制。Jackson是一个广泛使用的Java库,它允许开发者轻松地将Java对象转换为JSON格式,反之亦然。在处理复杂的JSON数据结构时,有时...
**3.3.01 LDAP Java API 使用指南** 在IT领域,LDAP(Lightweight Directory Access Protocol)是一种用于访问和管理分布式目录服务的标准协议。Java API for LDAP(也称为JNDI,Java Naming and Directory ...
在本项目"Thur_java_"中,我们关注的是利用Java技术实现一个名为“雷神移动大厅”的系统。这个系统的主要功能包括用户注册、用户登录、使用雷神服务、套餐办理以及套餐余额查询。以下是关于这些功能的具体实现和相关...
java发Email源码
本系统是一个很普通的java工程发送email的项目实例。项目的程序地址是email/src/simple.java说用包都在email/bin. 我发现网络中的关于java发送email的文章很多没有给全包,我下了三次才下全,现在我整理全了发给...