`
xiaofengtoo
  • 浏览: 493027 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

java 发送mail

    博客分类:
  • java
阅读更多

java 发送mail,很久之前整过,没做记录,这次整理下做个记录。

 

 

java  发送mail

import java.awt.List;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import com.biokee.dlafis.util.GetProperties;

// http://www.cnblogs.com/snoopy/articles/129932.html
// http://blog.csdn.net/zlz3907/article/details/3958081
// http://www.4ucode.com/Study/Topic/445710
public class JavaMail {

	String host;
    String userName;					// 邮箱用户名
    String password ;					//  密码 
    String from;						// 发送的邮箱名称
    String contentType; 		 		// 邮件内容格式(文本或html) 
    String replyTo;						// 回复地址,默认是发送地址
    
    String to;							// 发给谁
    String cc;							// 抄送
    String bcc;							// 暗送
    String subject;						// 邮件议题
    String body;						// 内容
   
    String fileName;					// 附件路径(注意绝对路径和相对路径的选择)

    // 用于保存发送附件的文件名列表
    List arrFileName = new List();

    // 用于收集附件名
    public void attachFile(String fileName) {
        this.arrFileName.add(fileName);
    }

    // 开始发送
    @SuppressWarnings("static-access")
	public boolean sendMail(String to,String cc ,String bcc, String subject, String body)
            throws IOException {
    	// 处理中文乱码
    	subject = new String(subject.getBytes(),"gb2312");
    	body = new String(body.getBytes(),"gb2312");
    	
        // 创建Properties对象
        Properties props = System.getProperties();
        // 创建信件服务器
        props.put("mail.smtp.host", this.host);
        // props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.auth", "true"); // 通过验证
        
        props.put("mail.smtp.connectiontimeout", "10000"); //
        props.put("mail.smtp.timeout", "10000");   // 
        
        
        // 得到默认的对话对象
        Session session = Session.getDefaultInstance(props, null);
        try {
            // 创建一个消息,并初始化该消息的各项元素
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(this.from));
            if (to.trim().length() > 0 || cc.trim().length()>0 || bcc.trim().length()>0) {
            	if(to!=null && to.trim().length() > 0 ){ 
	                sendAddress(to, msg,Message.RecipientType.TO);
            	}
            	if(cc!=null && cc.trim().length()>0){
            		 sendAddress(cc, msg,Message.RecipientType.CC);
            	}
            	if(bcc!=null && bcc.trim().length()>0){
            		 sendAddress(bcc, msg,Message.RecipientType.BCC);
            	}
            } else {
                System.out.println("None receiver! The program will be exit!");
                System.exit(0);
            }
            // 添加议题
            msg.setSubject(subject);
            
            // 后面的BodyPart将加入到此处创建的Multipart中
            Multipart mp = new MimeMultipart();
           
            // 获取附件
            int FileCount = this.arrFileName.getItemCount();
            if (FileCount > 0) {
                for (int i = 0; i < FileCount; i++) {
                    MimeBodyPart mbp = new MimeBodyPart();
                    // 选择出附件名
                    fileName = arrFileName.getItem(i).toString();
                    // 得到数据源
                    FileDataSource fds = new FileDataSource(new String(fileName.getBytes(),"UTF-8"));
                    // 得到附件本身并至入BodyPart
                    mbp.setDataHandler(new DataHandler(fds));
                    // 得到文件名同样至入BodyPart
                    mbp.setFileName(fds.getName());
                    mp.addBodyPart(mbp);
                }
                MimeBodyPart mbp = new MimeBodyPart();
                mbp.setText(body);
                mbp.setContent(body,"text/html;charset=gb2312");
                mp.addBodyPart(mbp);
                
                // 移走集合中的所有元素
                arrFileName.removeAll();
                // Multipart加入到信件
                msg.setContent(mp);
            } else {
                // 设置邮件正文
            	  if (contentType == null || contentType.equals("text")) {
            	      msg.setText(body);
            	  } else if (contentType.equals("html")) { 		// 未处理图片
            		  System.out.println(11);
            		  MimeBodyPart mbp = new MimeBodyPart();
//                      mbp.setText(body);
                      mbp.setContent(body,"text/html;charset=gb2312");
                      mp.addBodyPart(mbp);
                      // Multipart加入到信件
                      msg.setContent(mp);
            	  }
              
            }
            // 设置回复的地址
            InternetAddress[] add = new InternetAddress[1];
            add[0] = new InternetAddress("xxxx@126.com");
            msg.setReplyTo(add);
            
            // 设置信件头的发送日期
            msg.setSentDate(new Date());
            msg.saveChanges();
            
            // 发送信件
            Transport transport = session.getTransport("smtp");
            transport.connect(this.host, this.userName, this.password);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
//            msg.writeTo(System.out);
            System.out.println("send mail ok");
        } catch (MessagingException mex) {
        	 System.out.println("send mail error"+mex.getMessage());
            mex.printStackTrace();
            Exception ex = null;
            if ((ex = mex.getNextException()) != null) {
                ex.printStackTrace();
            }
            return false;
        }
        return true;
    }

    // 处理发送地址, to /cc /bcc 未校验邮件格式
	private void sendAddress(String sendAddress, MimeMessage msg,RecipientType type)throws AddressException, MessagingException {
		String[] arr = sendAddress.split(",");
		// int ReceiverCount=1;
		int receiverCount = arr.length;
		if (receiverCount > 0) {
		    InternetAddress[] address = new InternetAddress[receiverCount];
		    for (int i = 0; i < receiverCount; i++) {
		        address[i] = new InternetAddress(arr[i]);
		    }
		    msg.addRecipients(type, address);
		}
	}
	
	/**
	 * 读取配置文件,并设置对应参数
	 */
	public void setSendMailParam(){
		GetProperties g = new GetProperties();
		this.host=g.getPropertiesValue("host").trim();
		this.userName=g.getPropertiesValue("userName").trim();
		this.password=g.getPropertiesValue("password").trim();
		this.from=g.getPropertiesValue("from").trim();
		this.replyTo=g.getPropertiesValue("replyTo").trim();
		this.contentType=g.getPropertiesValue("contentType").trim();
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
	    String content="测试来了 Hello world!<br/> " +
	    		"<tabl  border=\"1\" align=\"center\" cellpadding=\"1\" cellspacing=\"1\">" +
	    		"<tr><td>name</td><td>address</td></tr>" +
	    		"<tr><td>aaa</td><td>d:\\1.txt</td></tr></table>";//邮件内容
	     String subject="测试2";//邮件主题
	        String mailTo1="xxxx@163.com";			//接收邮件的地址1
	        String mailTo2="";
//	        String mailTo2="xxxx@126.com";						//接收邮件的地址2
	        String attach1="d:\\1.txt";								//附件一地址
	        String attach2="d:\\a.txt";								//附件二地址
	        JavaMail mail=new JavaMail();
	        mail.setSendMailParam();
	        try {
//	            mail.attachFile(attach1);
//	            mail.attachFile(attach2);
	            mail.sendMail(mailTo1+","+mailTo2, null,null, subject,content);
	        } catch (Exception e) {
	            e.printStackTrace();
	        } 

	}

}

 

apache Commons-Email

 

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

import com.biokee.dlafis.util.GetProperties;

public class CommonsEmail {

	String host;
	 String userName;					// 邮箱用户名
	 String password ;					//  密码 
	 String from;						// 发送的邮箱名称
	 String contentType; 		 		// 邮件内容格式(文本或html) 
	 String replyTo;						// 回复地址,默认是发送地址
    
	 String to;							// 发给谁
	 String cc;							// 抄送
	 String bcc;							// 暗送
	 String subject;						// 邮件议题
	 String body;						// 内容
    
	
	 public static void main(String[] args) {
		 CommonsEmail emails = new CommonsEmail();
			try {
				emails.setSendMailParam();
				emails.send("xxx@163.com",null,null);
//				emails.sendAttachMail();
			} catch (EmailException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		 
	}
	 
	 
	// http://wisekingokok.iteye.com/blog/456655
	// http://www.blogjava.net/bulktree/archive/2008/04/07/191170.html
	 // http://apps.hi.baidu.com/share/detail/23398910
	public  void send(String to,String cc,String bcc) throws EmailException {
//		SimpleEmail email = new SimpleEmail();
		HtmlEmail email = new HtmlEmail();
	       //设置发送主机的服务器地址
	       email.setHostName(host);
	       //设置收件人邮箱 ,群发需要多次添加
	       email.addTo(to);
	       //发件人邮箱
	       email.setFrom(from);
	       //如果要求身份验证,设置用户名、密码,分别为发件人在邮件服务器上注册的用户名和密码
	       email.setAuthentication(userName, password);

	       //设置邮件的主题
	       email.setSubject("Hello, This is My First Email Application");

	       //邮件正文消息
//	       email.setMsg("I am bulktree This is JavaMail Application");
	       email.setHtmlMsg("I am bulktree This is JavaMail Application");
	       email.send();
	       System.out.println("The SimpleEmail send sucessful!!!");
	}    
	
	
	public  void sendAttachMail() throws EmailException{
		//	     创建一个Email附件  ,多附件多个处理
		EmailAttachment emailattachment = new EmailAttachment();
		emailattachment.setPath("d:/1.txt");
		//	     emailattachment.setURL(new URL("http://www.blogjava.net/bulktree/picture/bulktree.jpg"));  
		emailattachment.setDisposition(EmailAttachment.ATTACHMENT);
		emailattachment.setDescription("This is Smile picture");
		emailattachment.setName("1.txt");

		//	     创建一个email  

		MultiPartEmail multipartemail = new MultiPartEmail();

		multipartemail.setHostName(host);

		multipartemail.addTo("xxxx@163.com", "josn");

		multipartemail.setFrom(from, "feng");

		multipartemail.setAuthentication(userName, password);

		multipartemail.setSubject("This is a attachment Email");

		multipartemail.setMsg("this a attachment Eamil Test");

		//添加附件  

		multipartemail.attach(emailattachment);

		//发送邮件  

		multipartemail.send();

		System.out.println("The attachmentEmail send sucessful!!!");  
	}
	
	/**
	 * 读取配置文件,并设置对应参数
	 */
	public void setSendMailParam(){
		GetProperties g = new GetProperties();
		this.host=g.getPropertiesValue("host").trim();
		this.userName=g.getPropertiesValue("userName").trim();
		this.password=g.getPropertiesValue("password").trim();
		this.from=g.getPropertiesValue("from").trim();
		this.replyTo=g.getPropertiesValue("replyTo").trim();
		this.contentType=g.getPropertiesValue("contentType").trim();
	}
}

 

GetProperties:

 

import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class GetProperties {

	private final Log log = LogFactory.getLog(getClass());
	/**
	 * 获取Properties 某个键 -值
	 * @param name
	 * @return
	 */
	public String getPropertiesValue(String name){
		String propertiesFile="application.properties";
		URL url=getClass().getResource("/" + propertiesFile);
		String value=null;
		try {
			InputStream in = url.openStream();
			Properties p = new Properties();
			p.load(in);
			in.close();
			value = p.getProperty(name);
		} catch (Exception e) {
			log.error(e);
			e.printStackTrace();
		}
		return value;
	}	
}

 

spring 发送mail 就不写了,给个参考链接

http://huqilong.blog.51cto.com/53638/133210

 

 

附件是需要的jar 包!

 

 

 

 

分享到:
评论

相关推荐

    java发送mail使用的jar (附带类子代码)

    java发送mail使用的jar (附带类子代码) 解压缩后,可以得到jar和类子代码 解压缩后,可以得到jar和类子代码 https://blog.csdn.net/sxzlc/article/details/104216877

    java 发送附件mail

    总结一下,Java发送带有附件的邮件涉及到JavaMail API的使用,包括配置SMTP服务器、创建邮件对象、添加内容和附件,以及发送邮件等步骤。理解这些步骤和相关类的作用是实现此功能的关键。在处理不同类型的邮件时,...

    java发送mail

    用java开发邮件发送程序,总会出现这样或那样的错误,今天真正用到了这块,写一个demo给需要的同事一个参考,里面包括: 1. 程序报错及解决方案.txt 2. MailUtils.java(程序源代码) 3. activation.jar 4. mail.jar

    采用java的javax.mail发送 mail

    Java的javax.mail API是用于在Java应用程序中发送和接收电子邮件的标准库。这个API提供了一种与邮件服务器交互的抽象方式,使得开发者无需关心具体的邮件协议(如SMTP、POP3或IMAP)。在Java中,使用javax.mail库...

    java发送OutLook会议邮件

    Java发送Outlook会议邮件是一种常见的任务,特别是在自动化工作流程或者集成系统中。下面将详细介绍如何使用Java来实现这个功能。 首先,我们需要理解Outlook会议邮件实际上是一种特殊的邮件,它包含了会议的时间、...

    java发送HTML模版邮件

    在Java编程环境中,发送HTML模板邮件是一项常见的任务,特别是在企业级应用中,用于发送美观、格式化的通知或营销信息。本项目提供了一个完整的Eclipse工程,包含必要的jar包,可以直接导入并运行,使得开发者能够...

    java 发送邮件 spring发送邮件Mail

    Java发送邮件是软件开发中常见的需求,特别是在企业级应用中,用于发送通知、报表或验证用户的电子邮件地址。Spring框架提供了一种优雅的方式来处理这个任务,它整合了JavaMailSender接口和JavaMail API,使得在Java...

    Java Mail邮件发送源码下载

    Java Mail邮件发送是Java开发中常见的一项功能,用于在应用程序中发送电子邮件。Java Mail API提供了一个标准的接口,使得开发者可以方便地实现SMTP(简单邮件传输协议)和其他邮件协议的功能。下面将详细介绍Java ...

    java mail 发送QQ邮件

    Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和管理邮件。在Java中,使用Java Mail API发送QQ邮件是常见的需求,尤其对于自动化通知或者服务端消息传递非常实用。以下是对这个...

    Java发送outlook邮件

    首先,Java发送邮件主要依赖于JavaMail API,这是一个开源的Java库,它提供了标准的JavaMail API规范,允许开发者发送、接收和处理邮件。在发送Outlook邮件时,我们通常不是直接与Outlook交互,而是使用SMTP(Simple...

    java实现Mail发送(简单案例)

    message.setSubject("Java发送的邮件"); message.setText("这是使用JavaMail发送的测试邮件。"); ``` 3. **发送邮件** 最后,通过`Transport`类的`send`方法发送邮件: ```java Transport.send(message); `...

    java发送邮件必备的jar包(mail.jar和activation.jar)

    以下是一个简单的Java发送邮件的示例代码: ```java import javax.mail.*; import javax.mail.internet.*; public class SimpleMailSender { public static void main(String[] args) throws Exception { ...

    java发送邮件相关jar包

    Java发送邮件功能是Java开发中常见的一项任务,它允许开发者通过编程的方式向指定的电子邮箱地址发送信息。在Java中,我们通常会依赖一些特定的库或者jar包来实现这一功能。这里提到的两个jar包——`spring-context-...

    java_mail 1.5.zip

    总之,这个“java_mail 1.5.zip”压缩包对于Java开发者来说是一份宝贵的资源,通过学习源代码,不仅可以掌握如何使用JavaMail API发送邮件,还能深入了解邮件处理背后的机制,提高邮件应用的开发能力。

    java发送邮件实例(含mail包)

    Java发送邮件是软件开发中常见的功能,特别是在自动化通知、用户注册验证或客户服务中。Java Mail API 是Java平台上的一个标准库,它提供了处理电子邮件的工具,包括创建、发送和接收邮件。在这个实例中,我们将深入...

    java mail 发送邮件

    Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和管理邮件。在Java应用程序中,我们通常使用JavaMail API来实现邮件的自动化操作,比如发送带有附件的邮件、群发邮件等。下面将...

    JAVA_Mail_邮件_发送_接收_抄送_密送_附件

    JAVA_Mail_邮件_发送_接收_抄送_密送_附件 该资源是一个Java项目,可用Eclipse导入即可运行。 共4个类: 1:ReceiveMail.java -接收普通邮件 2:ReciveMailWithAttachMent.java --接收含有附件的邮件 3:SendMail....

    java mail,java发送邮件

    Java Mail 是一个强大的开源库,专门用于在Java应用程序中处理电子邮件的发送和接收。它提供了丰富的API,使得开发者能够方便地实现SMTP、POP3、IMAP等协议的功能,从而进行邮件的交互操作。 ### 一、Java Mail API...

    java Mail 发送邮件及邮件附件

    Java Mail 发送邮件及邮件附件 Java Mail 是一个广泛使用的 Java 库,用于发送电子邮件。以下是 Java Mail 发送邮件及邮件附件的知识点。 Java Mail 简介 Java Mail 是一个 Java 库,提供了发送电子邮件的功能。...

    java mail 发送邮件代码与架包

    Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和操作邮件。这个API提供了广泛的协议支持,包括SMTP(简单邮件传输协议)用于发送邮件,POP3和IMAP4用于接收邮件。在Java Mail中,...

Global site tag (gtag.js) - Google Analytics