`
xiaofengtoo
  • 浏览: 494052 次
  • 性别: 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邮件发送.zip

    总结来说,Java发送邮件涉及以下关键知识点: 1. JavaMail API的使用,包括`javax.mail`和`javax.mail.internet`包。 2. 配置SMTP服务器的参数,如主机名、端口、安全协议等。 3. 使用`Session`进行会话初始化和...

    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 库,提供了发送电子邮件的功能。...

Global site tag (gtag.js) - Google Analytics