`
jackter
  • 浏览: 33605 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • ksgimi: 楼主,您的api不錯,就是提示有病毒,您不您打包一个无毒api ...
    AgentFlow API

Java_Email

    博客分类:
  • JAVA
阅读更多

	/**
	 * 發送郵件
	 * @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 = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + Content;			    	
			    	//如果是個人化TITLE
			    	if ( "Y".equals(PersonalizedTitle) )
			    	{
			    		//Dear {收信人}:
			    		String Ptitle = "Dear " + toName_i + ":<BR>" ;										
			    		Content_1 = Ptitle + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + 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_email 代码"暗示我们将探讨如何使用Java进行电子邮件的编程。JavaMail API包含了许多关键组件,如`Session`、`Message`、`Transport`和`MimeMessage`等,它们是构建邮件系统的核心。 1. **Session**: 这...

    java-email.rar_email_email java_email客户端_java email_java mail 客户

    Java Email 是一种在Java应用程序中发送和接收电子邮件的机制,主要通过JavaMail API来实现。这个"java-email.rar"文件包含了一个完整的Java Email客户端代码示例,帮助开发者理解和实现自己的邮件功能。 JavaMail ...

    java_email_jar java email jar

    Java Email Jar是Java平台上用于发送和接收电子邮件的库,它主要依赖于两个核心组件:`javax.mail`和`javax.activation`。在提供的压缩包文件中,我们看到了以下几个关键的JAR文件: 1. `mail-1.4.1.jar`:这是Java...

    java_email

    这个"java_email"项目可能就是一个简单的Java程序示例,用于演示如何通过代码发送邮件,并且在"testEmail"这个子文件中包含了相关的测试代码或配置。 JavaMail API是Java平台上的一个开源库,它提供了一组接口和类...

    java6string源码-Java_Email:Java_Email

    java6string源码 简单的 Java 邮件 Simple Java Mail 是最简单的 Java 轻量级邮件库,同时能够发送复杂的电子邮件,包括(!), , , , , 乃至和与属性覆盖, 和工具。 只需发送您的电子邮件,无需处理。 Simple Java ...

    jsp-email.rar_email send java jsp_jsp email_jsp 邮件_邮件 jsp_邮件 附件

    这个名为"jsp-email.rar_email send java jsp_jsp email_jsp 邮件_邮件 jsp_邮件 附件"的压缩包包含了一个简单的示例,通过Servlet辅助JSP来完成邮件发送任务。 1. **邮件发送基础** 在Java中,我们通常使用...

    android_javaemail

    Log.e("Email", "邮件发送失败: " + e.getMessage()); } } ``` 以上代码演示了如何在Android应用中使用JavaMail API发送邮件的基本步骤。注意替换示例中的邮箱地址和密码,以匹配你的实际环境。此外,还可以根据...

    ikm_java_8.pdf

    System.out.println("Corporate Email: " + corporateEmail); } ``` ### 4. Swing 组件类型 #### 知识点解析: 在Java GUI编程中,Swing组件分为轻量级和重量级两种类型: - **a. 轻量级组件响应性和性能更快**...

    csv.rar_csv_csv java_csv java_java vcf csv_java操作v

    本篇文章将深入探讨如何在Java环境中处理这两种格式,特别是如何使用Java来解析VCF文件,并将数据转换为CSV格式。 CSV是一种简单但实用的数据交换格式,它以逗号分隔每个字段,每一行代表一条记录。在Java中处理CSV...

    Java_Mail.zip_java_java mail_java.mail_mail

    message.setText("Hello, this is a test email!"); Transport.send(message); } catch (MessagingException e) { e.printStackTrace(); } ``` 在处理更复杂的邮件需求时,例如包含HTML内容、附件、多部分消息...

    email_javaemail_library_

    标题中的"email_javaemail_library_"暗示我们将讨论的是一个专门针对Java平台的邮件库。在Java中,最常用的邮件库之一是JavaMail API,它是一个开放源代码的API,支持多种邮件协议,包括SMTP、POP3和IMAP。 ...

    java_发送email_web所需要加的jar包

    在web开发中,使用java发送email,需要加入两个jar包。在普通的java程序中可能不需要加入。 但在web中没加入会抛 javax.mail.Authenticator not Founder或java.lang.reflect.InvocationTargetException

    kban6.zip_java email_java编程

    Java邮件编程是Java开发中的一个重要领域,特别是在企业级应用中,用于系统间的自动化通信或向用户发送通知。在"Kban6.zip"压缩包中,我们可以看到一系列与Java电子邮件功能实现相关的源代码文件,以及一些可能的...

    java发送Email_群发email.rar

    这个名为"java发送Email_群发email.rar"的压缩包文件很可能包含了关于如何使用Java进行邮件发送,特别是群发邮件的相关教程或代码示例。 在Java中,发送电子邮件主要依赖于JavaMail API。这是一个强大的库,它提供...

    Java_squigly Filter是一个Jackson JSON PropertyFilter,它使用Facebo.zip

    Java_squigly Filter是Jackson库的一个扩展,用于在序列化JSON对象时提供更精细的控制。Jackson是一个广泛使用的Java库,它允许开发者轻松地将Java对象转换为JSON格式,反之亦然。在处理复杂的JSON数据结构时,有时...

    3.3.01_LDAP_Java_API_使用指南

    **3.3.01 LDAP Java API 使用指南** 在IT领域,LDAP(Lightweight Directory Access Protocol)是一种用于访问和管理分布式目录服务的标准协议。Java API for LDAP(也称为JNDI,Java Naming and Directory ...

    Thur_java_

    在本项目"Thur_java_"中,我们关注的是利用Java技术实现一个名为“雷神移动大厅”的系统。这个系统的主要功能包括用户注册、用户登录、使用雷神服务、套餐办理以及套餐余额查询。以下是关于这些功能的具体实现和相关...

    java发Email源码

    java发Email源码

    java发送email超级大封装

    本系统是一个很普通的java工程发送email的项目实例。项目的程序地址是email/src/simple.java说用包都在email/bin. 我发现网络中的关于java发送email的文章很多没有给全包,我下了三次才下全,现在我整理全了发给...

Global site tag (gtag.js) - Google Analytics