`

用javax.mai发送邮件

阅读更多
1、首先定义一个邮件的数据结构类
/*
 * 类名: EmailData.java
 * 作者: qiujy
 * 版本: v1.0
 * 创建日期 2005-12-2
 *
 * Copyright 2005-2006 qiujy All rights reserved.
 */
package com.xumh.common.util;

/**
 *
 * 类说明:邮件的数据结构类
 *
 * @author qiujy
 * @version v1.0 2005-12-2
 */
public class EmailData {
    String from   = null;  //发件人邮箱地址
    String[] recipients = null;  //收件人邮箱地址,可以多个
    String subject   = null;  //邮件主题
    String content   = null;  //邮件内容
    String contentType  = null;  //邮件内容格式(文本或html)
    String fileName  = null;  //附件文件名(目前只提供一个附件)

    //下面是相应的setter/getter方法
   
 /**
  * @return 返回 content。
  */
 public String getContent() {
  return content;
 }
 /**
  * @param content 设置邮件内容。
  */
 public void setContent(String content) {
  this.content = content;
 }
 /**
  * @return 返回 contentType。
  */
 public String getContentType() {
  return contentType;
 }
 /**
  * @param contentType 设置邮件内容格式(传入"text"或"html")。
  */
 public void setContentType(String contentType) {
  this.contentType = contentType;
 }
 /**
  * @return 返回 fileName。
  */
 public String getFileName() {
  return fileName;
 }
 /**
  * @param fileName 设置附件文件名(目前只能提供一个附件)。
  */
 public void setFileName(String fileName) {
  this.fileName = fileName;
 }
 /**
  * @return 返回 from。
  */
 public String getFrom() {
  return from;
 }
 /**
  * @param from 设置发件人。
  */
 public void setFrom(String from) {
  this.from = from;
 }
 /**
  * @return 返回 recipients。
  */
 public String[] getRecipients() {
  return recipients;
 }
 /**
  * @param recipients 设置收件人,可以多个。
  */
 public void setRecipients(String[] recipients) {
  this.recipients = recipients;
 }
 /**
  * @return 返回 subject。
  */
 public String getSubject() {
  return subject;
 }
 /**
  * @param subject 设置邮件主题。
  */
 public void setSubject(String subject) {
  this.subject = subject;
 }
 
}
2.创建一个设置SMTPAuthenticator(继承自Authenticator),通过它设置用户名、密码,来访问受保护的资源,这里的资源一般指的是邮件服务器。

/**
* 类名: SMTPAuthenticator.java
* 作者: qiujy
* 版本: v1.0
* 创建日期 2005-12-2
* Copyright 2005-2006 qiujy All rights reserved.
*/
package com.xumh.common.util;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class SMTPAuthenticator extends Authenticator{
    String username = null;
    String password = null;

    public SMTPAuthenticator(String username, String password){
        this.username = username;
        this.password = password;
    }

    protected PasswordAuthentication getPasswordAuthentication(){
        return new PasswordAuthentication(username, password);
    }

}

3、发送邮件(包括文本格式和html两种格式)
/*
 * 类名: PostEMail.java
 * 作者: qiujy
 * 版本: v1.0
 * 创建日期 2005-12-2
 *
 * Copyright 2005-2006 qiujy All rights reserved.
 */
package com.xumh.common.util;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
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;

public class PostEMail {

 /**
  *
  * 方法说明:发送邮件(包括文本格式和html两种格式)
  *
  * @param emailData
  * @throws MessagingException
  * @throws Exception
  */
 public static void sendMail(EmailData emailData) throws MessagingException,
   Exception {

  String from = emailData.getFrom();
  String[] recipients = emailData.getRecipients();
  String subject = emailData.getSubject();
  String content = emailData.getContent();
  String contentType = emailData.getContentType();
  String fileName = emailData.getFileName();

  if (recipients != null && recipients.length > 0) {

   Properties props = new Properties();
   // 设置邮件服务器地址,连接超时时限等信息
   props.put("mail.smtp.host", "smtp.126.com"); //邮件服务器,需根据自己的邮箱地址来更改
   props.put("mail.smtp.connectiontimeout", "10000"); //
   props.put("mail.smtp.timeout", "10000"); //
   props.put("mail.smtp.auth", "true");//需要验证

   SMTPAuthenticator mailauth = new SMTPAuthenticator("你的用户名", "你的密码");
  
   // 创建缺省的session对象
   Session session = Session.getDefaultInstance(props, mailauth);

   // 创建message对象
   Message msg = new MimeMessage(session);

   // 设置发件人和收件人
   InternetAddress addressFrom = new InternetAddress(from);
   msg.setFrom(addressFrom);
   InternetAddress[] addressTo = new InternetAddress[recipients.length];
   for (int i = 0; i < recipients.length; i++) {
    addressTo[i] = new InternetAddress(recipients[i]);
   }

   // Message.RecipientType.TO 收件人
   // Message.RecipientType.CC 抄送
   // Message.RecipientType.BCC 暗送
   msg.setRecipients(Message.RecipientType.TO, addressTo);

   // 设置邮件标题,中文编码
   subject = MimeUtility.encodeText(new String(subject.getBytes(),
     "GB2312"), "GB2312", "B");
   msg.setSubject(subject);

   // 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
   Multipart mmp = new MimeMultipart();
  
   // 设置邮件内容,区分文本格式和HTML格式
   if (contentType == null || contentType.equals("text")) {

    msg.setText(content);

   } else if (contentType.equals("html")) {
    // 给消息对象设置内容
    // 新建一个存放信件内容的BodyPart对象
    BodyPart bodyPart1 = new MimeBodyPart();
    // 给BodyPart对象设置内容和格式/编码方式
    bodyPart1.setContent(content, "text/html;charset=gb2312");

    // 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
    mmp.addBodyPart(bodyPart1);
   }
  
   // 设置邮件附件
   if (fileName != null && !fileName.trim().equals("")) {

    BodyPart bodyPart2 = new MimeBodyPart();

    FileDataSource fileDataSource = new FileDataSource(fileName);

    bodyPart2.setDataHandler(new DataHandler(fileDataSource));

    // 需要对附件文件名称进行转码,不然会出现乱码
    bodyPart2.setFileName(new String(fileName
      .getBytes("GB2312"), "8859_1"));
    mmp.addBodyPart(bodyPart2);
   }

   //把msg作为消息对象的内容
   msg.setContent(mmp);
   // 设置邮件发送时间
   msg.setSentDate(new java.util.Date());

   // 调用抽象类的静态方法send()发送邮件
   Transport.send(msg);
  }
 }
 
 public static void main(String[] args){
  EmailData emailData = new EmailData();
  emailData.setFrom("qiujiayong@126.com");// this is the from_email
  emailData.setRecipients(new String[]{"20978405@163.com","qiujiayong@126.com"});
  emailData.setSubject("邮件发送测试!");
  emailData.setContent("你好,收到这封信表现程序运行正常。");
  emailData.setContentType("text");
  emailData.setFileName("我好.sql");
 
  try {
   PostEMail.sendMail(emailData);
  } catch (MessagingException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  } catch (Exception e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
 }

}

 

分享到:
评论

相关推荐

    javax.mail发送邮件

    javax.mail发送邮件

    基于Maven的javax.mail发送邮件例子程序

    摘要: 下面例子演示怎样用javamail来发送邮件,在测试之前,我们要下载javamail的类包,并添加入你的工程中,如果你的IDE自带javamail的类包,那就很简单,直接import 就行,我使用的是MyEclipse 7.5,自带,所以...

    采用javax.mail发送邮件,可以发送附件

    采用javax.mail发送邮件,可以发送附件

    javax.mail发送邮件所需要jar及简单demo

    附件中主要使用javax.mail.jar以及activation.jar进行邮件的发送,demo中编写的方法适用于多收件人、多抄送人、多密送人、多附件格式。运行代码前需修改邮件用户名密码等信息。

    javax.jms.jar

    Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....

    javax.mail-1.4.4.jar

    通过java扩展包javax.mail-1.4.4.jar实现邮件发送功能。 import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart...

    javax.jms.jar下载

    javax.jms.BytesMessage.class javax.jms.Connection.class javax.jms.ConnectionConsumer.class javax.jms.ConnectionFactory.class javax.jms.ConnectionMetaData.class javax.jms.DeliveryMode.class javax.jms....

    javax.persistence.jar

    Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence....

    java 基于javax.mail的邮件发送测试工具

    基于javax.mail的邮件发送测试工具

    javax.jar 包免费下载

    javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar ...

    使用javax.mail发送邮件

    使用javax.mail发送邮件,协议为smtp,依赖版本为1.4.7

    javax.servlet.jar下载

    Files contained in javax.servlet.jar: META-INF/MANIFEST.MF javax/servlet/http/LocalStrings.properties javax.servlet.http.HttpSessionBindingListener.class javax.servlet....

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    在Oracle 11.2.0.4中调用 javax.mail 发送邮件时可能会遇到以下错误: ORA-29532: Java call terminated by uncaught Java exception: javax.mail.MessagingException: IOException while sending message; nested ...

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    javax.servlet的jar包,解决找不到javax.servlet.*等问题的!欢迎下载!!

    javax.mail.jar-Java发送邮件API

    javax.mail.jar-Java发送邮件API。Apache Email基于javax.mail做了一个开源项目,参见:http://commons.apache.org/proper/commons-email/

    javax.mail-1.5.6-API文档-中文版.zip

    赠送jar包:javax.mail-1.5.6.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    javax.ejb.rar

    META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.properties META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout....

    javax.ws.rs-api-2.0.1-API文档-中文版.zip

    赠送jar包:javax.ws.rs-api-2.0.1.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    javax.mail-1.6.2-API文档-中英对照版.zip

    使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

Global site tag (gtag.js) - Google Analytics