Java Mail发送简单邮件,完整代码
依赖javax.mail.jar,地址:https://java.net/projects/javamail/pages/Home
完整示例代码如下:
package com.jadic.utils; import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern; import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
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 javax.mail.internet.MimeUtility; /**
* 简易邮件发送<br>
* 需提供邮件服务提供商的smtp地址、邮箱账号、密码收件人邮箱<br><br>
* 使用方式:<br>
* 1.实例化JMail对象,适合多次利用相同账号信息发送到相同收件人<br>
* JMail jMail = new JMail(...);<br>
* jMail.sendMail(subject, content);<br>
* 2.直接调用JMail静态方法发送,需每次都将smtp、账号、收件人、内容提供<br>
* JMail.sendMail(smtp, fromUserAddress, fromUserPass,recipients,subject,content);
* @author Jadic
* @created 2014-5-13
*/
public class JMail { private String smtpHost;// smtp服务器地址
private String userName;// 发送方账号
private String userPass;// 发送方密码
private List<String> recipientList;// 收件人列表 private Message msg;
private boolean isMailConfigInited; private final static String VALID_EMAIL_REGEX = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";
private final static Pattern VALID_EMAIL_PATTERN = Pattern.compile(VALID_EMAIL_REGEX, Pattern.CASE_INSENSITIVE); private final static String SEND_MAIL_OK = "OK";
private final static String SEND_MAIL_NO_RECIPIENTS = "Fail:no valid recipient set"; private JMail(String smtp, String fromUserAddress, String fromUserPass) {
this.smtpHost = smtp;
this.userName = fromUserAddress;
this.userPass = fromUserPass; recipientList = new ArrayList<String>();
isMailConfigInited = false;
} /**
* @param smtp smtp服务地址
* @param fromUserAddress 发件人邮箱账号
* @param fromUserPass 发件人邮箱密码
* @param recipient 收件人地址(列表),支持多个收件人以";"分割
*/
public JMail(String smtp, String fromUserAddress, String fromUserPass, String recipient) {
this(smtp, fromUserAddress, fromUserPass);
String[] recs = recipient.split(";");
for (String rec : recs) {
if (isValidEmail(rec)) {
this.recipientList.add(rec);
}
}
} /**
* @param smtp smtp服务地址
* @param fromUserAddress 发件人邮箱账号
* @param fromUserPass 发件人邮箱密码
* @param recipients 收件人地址列表
*/
public JMail(String smtp, String fromUserAddress, String fromUserPass, String... recipients) {
this(smtp, fromUserAddress, fromUserPass);
for (String recipient : recipients) {
if (isValidEmail(recipient)) {
this.recipientList.add(recipient);
}
}
} /**
* @param smtp smtp服务地址
* @param fromUserAddress 发件人邮箱账号
* @param fromUserPass 发件人邮箱密码
* @param recipientList 收件人地址列表
*/
public JMail(String smtp, String fromUserAddress, String fromUserPass, List<String> recipientList) {
this(smtp, fromUserAddress, fromUserPass);
for (String recipient : recipientList) {
if (isValidEmail(recipient)) {
this.recipientList.add(recipient);
}
}
} /**
* 发送邮件,主题默认"default"
* @param content 发送内容
* @return "ok" 成功发送,否则返回失败提示
*/
public String sendMail(String content) {
return sendMail("default", content);
} /**
* @param subject 邮件主题
* @param content 邮件内容
* @return "ok" 成功发送,否则返回失败提示
*/
public String sendMail(String subject, String content) {
if (this.recipientList.size() <= 0) {
return SEND_MAIL_NO_RECIPIENTS;
} if (!isMailConfigInited) {
try {
initMailConfig();
} catch (AddressException e) {
return "fail: address err[" + e.getMessage().trim() + "]";
} catch (MessagingException e) {
return "fail: MessagingErr[" + e.getMessage().trim() + "]";
}
}
try {
msg.setSentDate(new Date());
} catch (MessagingException e) {
e.printStackTrace();
}
try {
msg.setSubject(MimeUtility.encodeText(subject, "gbk", "B")); MimeMultipart mmp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(content, "text/plain;charset=gbk");
mmp.addBodyPart(mbp);
msg.setContent(mmp);
Transport.send(msg);
} catch (UnsupportedEncodingException e) {
return "fail: unsupported encoding[" + e.getMessage().trim() + "]";
} catch (MessagingException e) {
return "fail: MessagingErr[" + e.getMessage().trim() + "]";
} return SEND_MAIL_OK;
} private void initMailConfig() throws AddressException, MessagingException {
Properties props = new Properties();
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", smtpHost);
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp"); Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, userPass);
}
});
msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
msg.addRecipients(Message.RecipientType.TO, getRecipients());
isMailConfigInited = true;
} /**
*
* @param smtp smtp地址
* @param fromUserAddress 发件人账号
* @param fromUserPass 发件人账号密码
* @param recipients 收件人(列表),多个收件人以";"分割
* @param subject 邮件主题
* @param content 邮件内容
* @return "ok" 成功发送,否则返回失败提示
*/
public static String sendMail(String smtp, String fromUserAddress, String fromUserPass, String recipients, String subject,
String content) {
final String userName = fromUserAddress;
final String userPass = fromUserPass;
Properties props = new Properties();
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", smtp);
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp"); Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, userPass);
}
});
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(userName));
String[] recipientAry = recipients.split(";");
InternetAddress[] recipientsAddress = new InternetAddress[recipientAry.length];
for (int i = 0; i < recipientAry.length; i++) {
if (isValidEmail(recipientAry[i])) {
recipientsAddress[i] = new InternetAddress(recipientAry[i]);
}
}
msg.addRecipients(Message.RecipientType.TO, recipientsAddress);
msg.setSentDate(new Date());
msg.setSubject(MimeUtility.encodeText(subject, "gbk", "B")); MimeMultipart mmp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(content, "text/plain;charset=gbk");
mmp.addBodyPart(mbp);
msg.setContent(mmp);
Transport.send(msg);
} catch (UnsupportedEncodingException e) {
return "fail: unsupported encoding[" + e.getMessage().trim() + "]";
} catch (MessagingException e) {
return "fail: MessagingErr[" + e.getMessage().trim() + "]";
} return SEND_MAIL_OK;
} private InternetAddress[] getRecipients() throws AddressException {
if (recipientList.size() > 0) {
InternetAddress[] recipients = new InternetAddress[recipientList.size()];
for (int i = 0; i < recipients.length; i++) {
recipients[i] = new InternetAddress(this.recipientList.get(i));
}
return recipients;
}
return new InternetAddress[0];
} private static boolean isValidEmail(String email) {
return email != null && VALID_EMAIL_PATTERN.matcher(email).find();
}
}
Java Mail发送简单邮件,完整代码的更多相关文章
- 解决java mail发送TXT附件被直接显示在正文中的问题
这两天遇到一个问题,关于使用java mail发送邮件的问题. 详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀 ...
- 使用Spring的JAVA Mail支持简化邮件发送(转)
闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...
- JavaMail发送简单邮件
非常简单的发送邮件实现,网上有很多啦,但还是自己写写记录下吧. package cn.jmail.test; import java.util.Properties; import javax.mai ...
- SpringBoot 发送简单邮件
使用SpringBoot 发送简单邮件 1. 在pom.xml中导入依赖 <!--邮件依赖--> <dependency> <groupId>org.springf ...
- Java Mail 发送带有附件的邮件
1.小编用的是163邮箱发送邮件,所以要先登录163邮箱开启POP3/SMTP/IMAP服务方法: 2.下载所需的java-mail 包 https://maven.java.net/content/ ...
- 使用javaMail发送简单邮件
参考网页:http://blog.csdn.net/xietansheng/article/details/51673073package com.bfd.ftp.utils; import java ...
- (一)JavaMail发送简单邮件
1,导入依赖 <dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail ...
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- 关于使用 Spring 发送简单邮件
这是通过Spring 框架内置的功能完成简单邮件发送的测试用例. 导入相关的 jar 包. Spring 邮件抽象层的主要包为 org.springframework.mail. 它包括了发送电子邮件 ...
随机推荐
- Mysql中关于 group_concat函数详解
group_concat()主要功能:能将相同的行组合起来 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Sepa ...
- 基于EF的数据外键关联查询
现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦.而我现在要做的就是基于EF的外键关联查询.很方便的. 首先,创建基础查询的BaseS ...
- [置顶] 问题解决——XP线程池找不到QueueUserWorkItem
2013年7月11号 主管让同事写一个并发100的小工具进行什么压力测试,据说是创建100个线程. 我表示这真真的是在坑人! 线程创建消耗资源,以自己的笔记本来跑这个东西,时间片都消耗在了线程切换上了 ...
- 关于Vim的问题s
2013-11-23 17:29:45 1.关于.swp文件 swap对于保护非正常退出是有好处的,但从最开始使用vim就发现的一个问题十分恼火!非正常退出再进入后选择了恢复R,然后编辑正常保存正常退 ...
- Java模拟登陆【转载】
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...
- GitHub使用详解
1.GitHub是什么? GitHub这个名词既可以是那个流行的代码分享和协作网站 https://github.com/,也可以是指Git客户端工具(与其他的Git客户端工具如GitEye类似,只不 ...
- [ES6] 16. Object Enhancements
Define object: var color = "blue"; var speed = 120; var car = {color, speed}; console.log( ...
- SparkGraphXTest.scala
/** * Created by root on 9/8/15. */ import org.apache.spark._ import org.apache.spark.graphx._ impor ...
- Android图片选择器--仿QQ
当做一款APP,需要选择本地图片时,首先考虑的无疑是系统相册,但是Android手机五花八门,再者手机像素的提升,大图无法返回等异常因数,导致适配机型比较困难,微信.QQ都相继的在自己的APP里集成了 ...
- PHP中使用kindeditor
KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome. Safari.Opera等主流浏览器.KindEditor ...