`
zznj1123
  • 浏览: 125794 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

建造模式--JavaMail发送邮件(多语言无乱码)

阅读更多

<1>IMail 接口

import java.io.File;
import java.util.Date;
import java.util.List;

import javax.mail.BodyPart;

public interface IMail {
public void set主题(String 主题);
public void setText(String Text);
public void setCotnent(BodyPart content);
public void set发件人(Email地址 发件人);
public void set收件人(List<Email地址> 收件人);
public void set抄送人(List<Email地址> 抄送人);
public void set暗送人(List<Email地址> 暗送人);
public void set邮件时间(Date time);
public void set附件(List<File> files);
public Email地址 get发件人();
public List<Email地址> get收件人();
public List<Email地址> get抄送人();
public List<Email地址> get暗送人();
public List<File> get附件();
public Date get邮件时间();
public String get主题();
public String getText();
public BodyPart getContent();
}

<2>Mail类
import java.io.File;
import java.util.Date;
import java.util.List;

import javax.mail.BodyPart;

public class Mail implements IMail{
private Email地址 发件人;
private String 主题;
private String text;
private BodyPart content;
private List<Email地址> 抄送人;
private List<Email地址> 收件人;
private List<Email地址> 暗送人;
private Date 邮件时间 ;
private List<File> 附件;

public Email地址 get发件人() {
    return this.发件人;
}

public List<Email地址> get抄送人() {
    return this.抄送人;
}

public List<Email地址> get收件人() {
    return this.收件人;
}

public List<Email地址> get暗送人() {
    return this.暗送人;
}

public Date get邮件时间() {
    return this.邮件时间;
}

public List<File> get附件() {
    return this.附件;
}

public void set发件人(Email地址 发件人) {
    this.发件人 = 发件人;
}

public void set抄送人(List<Email地址> 抄送人) {
    this.抄送人 = 抄送人;
}

public void set收件人(List<Email地址> 收件人) {
    this.收件人 = 收件人;
}

public void set暗送人(List<Email地址> 暗送人) {
    this.暗送人 = 暗送人;
}

public void set邮件时间(Date time) {
    this.邮件时间 = time;
}

public void set附件(List<File> files) {
    this.附件 = files;
}

public BodyPart getContent() {
    return this.content;
}

public String getText() {
    return this.text;
}

public String get主题() {
    return this.主题;
}

public void setCotnent(BodyPart content) {
    this.content = content;
}

public void setText(String text) {
    this.text = text;
}

public void set主题(String 主题) {
    this.主题 = 主题;
}
}

<3>Abstract邮件发送服务器
import java.io.File;
import java.util.Date;
import java.util.List;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
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 abstract class Abstract邮件发送服务器 {
protected IMail 邮件;
protected Session session;
protected String send方式;

public Abstract邮件发送服务器() {
 
}

protected InternetAddress[] getAddressByType(List<Email地址> list) throws Exception {
    if (list != null) {
     InternetAddress address[] = new InternetAddress[list.size()];
     for (int i = 0 ; i < list.size(); i++) {
      address[i] = list.get(i).toInternetAddress();
     }
     return address;
    }
    return null;
}
public void 发送邮件() {
    try {
     MimeMessage message = new MimeMessage(session);
     Multipart multipart = new MimeMultipart();
     message.setSubject(邮件.get主题(),"utf-8");
     if(邮件.getText() != null)
      message.setText(邮件.getText(),"utf-8");
     message.setSentDate(邮件.get邮件时间()==null?new Date():this.邮件.get邮件时间());
     multipart.addBodyPart(this.邮件.getContent());

     //添加发件人
     message.setFrom(邮件.get发件人().toInternetAddress());
  
     //添加收件人
     InternetAddress address[] = this.getAddressByType(this.邮件.get收件人());
     if (address != null)
      message.addRecipients(Message.RecipientType.TO,address);
     //添加抄送人
     address = this.getAddressByType(this.邮件.get抄送人());
     if (address != null)
      message.addRecipients(Message.RecipientType.CC,address);
     //添加暗送人
     address = this.getAddressByType(this.邮件.get暗送人());
     if (address != null)
      message.addRecipients(Message.RecipientType.BCC,address);
     //添加附件
     if (this.邮件.get附件() != null) {
      for (int i = 0; i < this.邮件.get附件().size(); i++) {
       File file = this.邮件.get附件().get(i);
       BodyPart messageBodyPart = new MimeBodyPart(); 
       DataSource source = new FileDataSource(file);
       messageBodyPart.setDataHandler(new DataHandler(source));
       messageBodyPart.setFileName(MimeUtility.encodeWord(file.getName(),"UTF-8","Q"));
       multipart.addBodyPart(messageBodyPart);    
      }
     }
     message.setContent(multipart);
     if(send方式 == null)
      send方式 = "smtp";
     session.getTransport(send方式).send(message);
    } catch (Exception e) {
     e.printStackTrace();
    }
}

public Session    getSession() {
    return session;
}
public void setSession(Session session) {
    this.session = session;
}
public IMail get邮件() {
    return 邮件;
}
public void set邮件(IMail 邮件) {
    this.邮件 = 邮件;
}

}

<4>Abstract发送邮件建造者
import javax.mail.Session;


public abstract class Abstract发送邮件建造者 {
protected Abstract邮件发送服务器 mailServer;

public Abstract发送邮件建造者() {
 
}

public abstract void 建造邮件(IMail mail);

public abstract void 建造邮件session(Session session);

public void 建造发送邮件() {
    this.mailServer.发送邮件();
}
}

<5>Smtp邮件发送服务器
public class Smtp邮件发送服务器 extends Abstract邮件发送服务器 {
public Smtp邮件发送服务器() {
    this.send方式 = "smtp";
}
}

<6>Smtp发送邮件建造者
import java.util.Properties;

import javax.mail.Session;


public class Smtp发送邮件建造者 extends Abstract发送邮件建造者 {
public Smtp发送邮件建造者() {
    this.mailServer = new Smtp邮件发送服务器();
}

@Override
public void 建造邮件(IMail mail) {
    this.mailServer.set邮件(mail); 
}

@Override
public void 建造邮件session(Session session) {
    this.mailServer.setSession(session); 
}
}

<7>PasswordAuthenticator
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

class PasswordAuthenticator extends Authenticator {

      private String username;
      private String password;

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

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

}

<8>Email地址
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;

public class Email地址 {
protected String 地址;

protected String 地址显示别名;

public Email地址() {
 
}

public Email地址(String 地址, String 地址显示别名){
    this.地址 = 地址;
    this.地址显示别名 = 地址显示别名;
}

public String get地址() {
    return 地址;
}

public void set地址(String 地址) {
    this.地址 = 地址;
}

public String get地址显示别名() {
    return 地址显示别名;
}

public void set地址显示别名(String 地址显示别名) {
    this.地址显示别名 = 地址显示别名;
}

public InternetAddress toInternetAddress() throws Exception {
    if (地址显示别名 != null && !地址显示别名.trim().equals("")) {
     return new InternetAddress(地址, MimeUtility.encodeWord(地址显示别名,
       "utf-8", "Q"));
    }
    return new InternetAddress(地址);
}
}

<9>发送邮件Director
import javax.mail.Session;

public class 发送邮件Director {
Abstract发送邮件建造者 build;

public 发送邮件Director(Abstract发送邮件建造者 build) {
    this.build = build;
}

public void 发送邮件建造(IMail mail, Session session) {
    this.build.建造邮件(mail);
    this.build.建造邮件session(session);
    this.build.建造发送邮件();
}
}

<10>Client
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Session;
import javax.mail.internet.MimeBodyPart;

public class Client {
public static void main(String args[]) throws Exception {
    IMail mail = new Mail();
    mail.set主题("제외되는");
    mail.set发件人(new Email地址("james_zhao_abm@163.com","赵成明"));
    List<Email地址> list = new ArrayList<Email地址>();
    list.add(new Email地址("jszhaochengming@hotmail.com","刘德华"));
    mail.set收件人(list);
    list    = new ArrayList<Email地址>();
    list.add(new Email地址("james_zhao_abm@163.com","纯净水"));
    list.add(new Email地址("jszhaochengming@hotmail.com","刘德华"));
    mail.set抄送人(list);
    BodyPart contentPart = new MimeBodyPart();
    contentPart.setHeader("Content-Transfer-Encoding",     "base64");  
    contentPart.setContent("测试哟见呵呵","text/html;charset=utf-8");
    mail.setCotnent(contentPart);
    List<File> listF = new ArrayList<File>();
    listF.add(new File("d:/출주제외되는2.rar"));
    mail.set附件(listF);
    Smtp发送邮件建造者 smtp = new Smtp发送邮件建造者();
    Properties 属性配置    = new Properties();
    属性配置.put("mail.smtp.host", "smtp.163.com");
    属性配置.put("mail.smtp.auth", "true");
    Session session = Session.getInstance(属性配置,new PasswordAuthenticator("xxxxx", "xxxxx"));
    发送邮件Director director = new 发送邮件Director(smtp);
    director.发送邮件建造(mail, session);
}
}

分享到:
评论
1 楼 bruthe 2014-06-20  
  奔溃啊  能不能国际化点啊  中文类名

相关推荐

    spring-boot-2.6.6.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    LabVIEW中最小二乘法曲线拟合与报表生成:流程图自动化实现波形拟合的最佳方法

    内容概要:本文详细介绍了LabVIEW中最小二乘法的应用及其在曲线拟合和报表生成中的具体实现。LabVIEW作为一种流程图编程语言和开发环境,能够通过图形化编程的方式,使用户轻松构建拟合模型并计算最佳拟合曲线的参数。此外,LabVIEW还提供了丰富的波形处理和分析工具,支持对波形数据进行预处理(如滤波、降噪和采样),并通过最小二乘法进行波形拟合,最终生成详细的报表。最小二乘法通过最小化数据点与拟合曲线之间的误差平方和,广泛应用于统计学、工程学和物理学等领域。 适合人群:从事科学研究、工程设计和数据分析的专业人士,尤其是那些希望通过图形化编程提高工作效率的人群。 使用场景及目标:适用于需要对大量数据进行拟合分析并生成报告的场合,如实验数据分析、工程设计验证等。目标是通过LabVIEW提供的强大工具,快速准确地找到最佳拟合曲线,提升数据分析效率。 其他说明:LabVIEW不仅简化了编程过程,还提高了数据分析的直观性和准确性,使得即使是非专业程序员也能轻松上手。

    C语言编程入门教程精简版专题培训课件.ppt

    C语言编程入门教程精简版专题培训课件.ppt

    spring-boot-2.4.4.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    DNA进化算法及其改进研究样本.doc

    DNA进化算法及其改进研究样本.doc

    智慧城市-【精品】2019年百度地图城市大数据平台解决方案.zip

    智慧城市-【精品】2019年百度地图城市大数据平台解决方案.zip

    spring-data-redis-1.2.0.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-data-redis-1.4.3.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    rocksdbjni-6.19.3.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.2.8.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-虚拟城市(2D经营策略游戏).zip

    scratch少儿编程逻辑思维游戏源码-虚拟城市(2D经营策略游戏).zip

    spring-boot-2.1.17.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.4.10.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-突击尖峰.zip

    scratch少儿编程逻辑思维游戏源码-突击尖峰.zip

    scratch少儿编程逻辑思维游戏源码-涂鸦跳跃.zip

    scratch少儿编程逻辑思维游戏源码-涂鸦跳跃.zip

    spring-boot-2.5.3.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.6.6.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.3.6.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

Global site tag (gtag.js) - Google Analytics