文档章节

java邮件发送

black_lxf_720
 black_lxf_720
发布于 2015/09/10 11:57
字数 1224
阅读 107
收藏 3
1、导入email的jar包
2、在项目中配置相关的参数。(发送的邮箱用户名和密码,服务器)
host = smtp.qq.com
from = test@qq.com
user = 
pass = 123456
3、封装邮件发送的方法,下面四段就OK了,然后再相应的位置和相应的要求直接调用send方法,传递相关参数。

/**
 * 邮件发送配置器
 * 
 * 
 */
public class Config implements Serializable {
 private static final long serialVersionUID = 1L;
 // 发送方邮件服务器
 private String smtp;
 // 发送时是否验证
 private boolean auth;
 // 验证用户名
 private String username;
 // 验证密码
 private String password;
 // 是否使用代理
 private boolean proxy;
 // 代理地址
 private String proxyHost;
 // 代理端口
 private int proxyPort = 80;
 public String getSmtp() {
  return smtp;
 }
 public void setSmtp(String smtp) {
  this.smtp = smtp;
 }
 public boolean isAuth() {
  return auth;
 }
 public void setAuth(boolean auth) {
  this.auth = auth;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public boolean isProxy() {
  return proxy;
 }
 public void setProxy(boolean proxy) {
  this.proxy = proxy;
 }
 public String getProxyHost() {
  return proxyHost;
 }
 public void setProxyHost(String proxyHost) {
  this.proxyHost = proxyHost;
 }
 public int getProxyPort() {
  return proxyPort;
 }
 public void setProxyPort(int proxyPort) {
  this.proxyPort = proxyPort;
 }
 protected void check() {
 }
}
/**
 * Email 类:添加相关Email信息 
 */
public class Email implements Serializable {
 private static final long serialVersionUID = 1L;
 /**
  * 邮件内容类型
  * 
  * @author lvyue
  * 
  */
 public enum ContentType {
  TEXT, HTML
 }
 // 发件人
 private String sender;
 // 收件人
 private String[] addressees;
 // 抄送人
 private String[] cc;
 // 安送人
 private String[] bcc;
 // 邮件主题
 private String subject;
 // 邮件内容
 private String content;
 // 文本内容类型
 private ContentType contentType = ContentType.TEXT;
 // 附件
 private boolean affix;
 // 附件地址
 private String[] affixName;
 /**
  * 获取发信人地址
  * 
  * @return
  */
 public String getSender() {
  return sender;
 }
 /**
  * 设置发信人地址
  * 
  * @param sender
  */
 public void setSender(String sender) {
  this.sender = sender;
 }
 /**
  * 获取收信人地址
  * 
  * @return
  */
 public String[] getAddressees() {
  return addressees;
 }
 /**
  * 设置收信人地址
  * 
  * @param addressees
  */
 public void setAddressees(String[] addressees) {
  this.addressees = addressees;
 }
 /**
  * 获取邮件主题
  * 
  * @return
  */
 public String getSubject() {
  return subject;
 }
 /**
  * 设置邮件主题
  * 
  * @param subject
  */
 public void setSubject(String subject) {
  this.subject = subject;
 }
 /**
  * 获取邮件内容
  * 
  * @return
  */
 public String getContent() {
  return content;
 }
 /**
  * 设置邮件内容
  * 
  * @param content
  */
 public void setContent(String content) {
  this.content = content;
 }
 /**
  * 获取邮件类型
  * 
  * @return
  */
 public ContentType getContentType() {
  return contentType;
 }
 /**
  * 设置邮件类型
  * 
  * @param contentType
  */
 public void setContentType(ContentType contentType) {
  this.contentType = contentType;
 }
 /**
  * 是否带有附件
  * 
  * @return
  */
 public boolean hasAffix() {
  return affix;
 }
 /**
  * 获取附件地址
  * 
  * @return
  */
 public String[] getAffixName() {
  return affixName;
 }
 /**
  * 设置附件地址
  * 
  * @param affixName
  */
 public void setAffixName(String[] affixName) {
  this.affixName = affixName;
  affix = (this.affixName != null && this.affixName.length > 0);
 }
 public String[] getCc() {
  return cc;
 }
 /**
  * 抄送人
  * 
  * @param cc
  */
 public void setCc(String[] cc) {
  this.cc = cc;
 }
 public String[] getBcc() {
  return bcc;
 }
 /**
  * 添加暗送
  * 
  * @param bcc
  */
 public void setBcc(String[] bcc) {
  this.bcc = bcc;
 }
}
/**
 * @FileName MailManager.java
 * @Description: 
 *
 * @Date 2015年8月25日 
 * @author 
 * @version 1.0
 * 
 */
public class MailManager {
 protected Log logger = LogFactory.getLog(this.getClass());
 private Session session;
 public MailManager(Config config) {
  try {
   reload(config);
  } catch (Throwable t) {
   logger.error("", t);
  }
 }
 public boolean send(Email email) {
  try {
   // 定义发送信息的对象
   Message msg = new MimeMessage(session);
   // 设置发信人地址
   if (StringUtils.isNotEmpty(email.getSender())) {
    msg.setFrom(new InternetAddress(email.getSender()));
   } else {
    msg.setFrom();
   }
   // 设置标题
   msg.setSubject(email.getSubject());
   // 获取收信人列表
   String[] addressees = email.getAddressees();
   // 非空验证
   // 设置收信人
   InternetAddress[] toInternetAddressees = new InternetAddress[addressees.length];
   for (int i = 0; i < addressees.length; i++) {
    toInternetAddressees[i] = new InternetAddress(addressees[i]);
   }
   msg.setRecipients(RecipientType.TO, toInternetAddressees);
   // 设置抄送人
   String[] cc = email.getCc();
   if (cc != null && cc.length > 0) {
    // 设置收信人
    InternetAddress[] ccInternetAddressees = new InternetAddress[cc.length];
    for (int i = 0; i < cc.length; i++) {
     ccInternetAddressees[i] = new InternetAddress(cc[i]);
    }
    msg.setRecipients(RecipientType.CC, ccInternetAddressees);
   }
   // 设置暗送
   String[] bcc = email.getBcc();
   if (bcc != null && bcc.length > 0) {
    // 设置收信人
    InternetAddress[] bccInternetAddressees = new InternetAddress[bcc.length];
    for (int i = 0; i < bcc.length; i++) {
     bccInternetAddressees[i] = new InternetAddress(bcc[i]);
    }
    msg.setRecipients(RecipientType.BCC, bccInternetAddressees);
   }
   if (email.getContentType().equals(ContentType.TEXT)) {
    msg.setText(email.getContent());
    // 添加附件
    if (email.hasAffix()) {
     Multipart mp = new MimeMultipart();
     String[] affixName = email.getAffixName();
     for (int i = 0; i < affixName.length; i++) {
      MimeBodyPart affix = new MimeBodyPart();
      affix.attachFile(affixName[i]);
      mp.addBodyPart(affix, i);
     }
     msg.setContent(mp);
    }
   } else if (email.getContentType().equals(ContentType.HTML)) {
    // 添加邮件内容
    BodyPart body = new MimeBodyPart();
    body.setContent(email.getContent(), "text/html;charset=utf-8");
    Multipart mp = new MimeMultipart();
    mp.addBodyPart(body, 0);
    // 添加附件
    if (email.hasAffix()) {
     String[] affixName = email.getAffixName();
     for (int i = 0; i < affixName.length; i++) {
      MimeBodyPart affix = new MimeBodyPart();
      affix.attachFile(affixName[i]);
      mp.addBodyPart(affix, i + 1);
     }
    }
    msg.setContent(mp);
   }
   // 设置发送时间
   msg.setSentDate(new Date(System.currentTimeMillis()));
   // 发送邮件
   Transport.send(msg);
   return true;
  } catch (Throwable t) {
   logger.error("", t);
   return false;
  }
 }
 /**
  * 重新载入配置
  * 
  * @param config
  * @throws Throwable
  */
 public void reload(Config config) throws Throwable {
  try {
   // 不为空
   // 配置验证
   config.check();
   // 定义属性对象
   Properties props = new Properties();
   // 设置属性
   // 设置smtp服务器
   props.put("mail.smtp.host", config.getSmtp());
   // 设置客户端是否向邮件服务器提交验证
   props.put("mail.smtp.auth", config.isAuth());
   // 定义验证对象
   Authenticator authenticator = null;
   if (config.isAuth()) {
    // 设置验证信息
    authenticator = new LocalAuthenticator(config.getUsername(), config.getPassword());
   }
   // 设置代理
   if (config.isProxy()) {
    System.setProperty("http.proxyHost", config.getProxyHost());
    System.setProperty("http.proxyPort", String.valueOf(config.getProxyPort()));
   }
   // 初始化Session
   session = Session.getDefaultInstance(props, authenticator);
  } catch (Throwable t) {
   logger.error("", t);
  }
 }
 /**
  * 验证地址类
  * 
  * @author lvyuely
  * 
  */
 class LocalAuthenticator extends Authenticator {
  private String username;
  private String password;
  public LocalAuthenticator(String username, String password) {
   this.username = username;
   this.password = password;
  }
  @Override
  protected PasswordAuthentication getPasswordAuthentication() {
   // TODO Auto-generated method stub
   return new PasswordAuthentication(username, password);
  }
 }
}
/**
 * @FileName Test.java
 * @Description: 
 *
 * @Date 2015年8月25日 
 * @author 
 * @version 1.0
 * 
 */
public class MailSend {
 public static void send(String to,String title,String content,ContentType t){
  Config config = new Config();
  config.setAuth(true);
  config.setUsername(MailContent.USER);
  config.setPassword(MailContent.PASS);
  config.setSmtp(MailContent.HOST);
  config.setProxy(false);
  
  MailManager manager = new MailManager(config);
  Email mail = new Email();
  mail.setSender(MailContent.FROM);
  mail.setAddressees(new String[] { to });
  //mail.setBcc(new String[] { "keeley.jun@qq.com" });
  mail.setSubject(title);
  mail.setContent(content);
  mail.setContentType(t);
  manager.send(mail);
 }
//发送文本
 public static void send(String to,String title,String content){
  send(to,title,content,ContentType.TEXT);
 }
//发送网页内容
 public static void sendHtml(String to,String title,String content){
  send(to,title,content,ContentType.HTML);
 }
//携链接地址
 private static void send() {
  String html=HttpKit.get("发送的链接地址....................");
  sendHtml("收件人","测试",html);
 }
}

© 著作权归作者所有

black_lxf_720
粉丝 5
博文 36
码字总数 20281
作品 0
深圳
程序员
私信 提问
Java 发送qq邮件基础和封装

前文摘自 菜鸟教程 :http://www.runoob.com/java/java-sending-email.html 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Frame...

fantj666
2018/03/18
0
0
Java 9 已在路上,公共审查规范草案出来了

Oracle 的 Iris Clark 在发送给 OpenJDK 邮件列表的邮件中宣布,Java 9 的公共审查规范草案已可用。并表示,如果所有人都对草案感到满意,会将其提交给 JCP 项目管理办公室(PMO),以便下星...

王练
2017/03/11
3.9K
10
[手记]使用java Mail发送邮件.

因为项目中要用到这个功能,写出来了.所以和大家分享一下.首先,完成javamail发送电子邮件,需要到oracle网站上下载javamail的jar包:地址为:http://www.oracle.com/technetwork/java/javamail...

被风遗忘
2012/05/06
530
0
Java 发送邮件实现(JavaMail 和 Spring 实现)

Java 实现邮件的发送,使用 JavaMail 和 Spring 实现 一、使用 JavaMail JavaMail 是 Java 处理电子邮件相关的编程接口,但是没有被加在标准的Java开发工具包中(Java Development Kit),所...

非摩尔根
01/17
126
0
关于Java程序发邮件的疑问

最近心血来潮,想自己做个网站,java web 类型,现在关于网站给用户发邮件有个疑问,网上找的那些用 mail.jar 发邮件时可以发送给的,但是我想问下成规模的那些 java web 网站也是用这个 ma...

forwy
2017/03/14
98
1

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
9
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
910
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部