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. 它包括了发送电子邮件 ...
随机推荐
- hdu 2553 N皇后问题 (经典DFS)
题目链接:点击链接 思路:用一维数组hang[num] = i,num表示第num行,i表示第i列,计算n = 1~10皇后的不同放置数量,然后打表 #include<stdio.h> # ...
- 基础数据结构 之 队列(python实现)
队也是编程开发中常见的一种数据结构.栈和队可用来模拟函数的递归过程.队的特点为先入先出,主要操作包括入队和出队.入队时需判断队是否已满,出队时需判断队是否为空.下面给出一个队的python实现的例子: ...
- Codeforces Round #Pi (Div. 2) E. President and Roads tarjan+最短路
E. President and RoadsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/567 ...
- BZOJ 3505: [Cqoi2014]数三角形 数学
3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- delphi treeview 鼠标移动显示hint信息
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Nod ...
- C++第11周(春)项目2 - 职员有薪水了
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2 - 职员有薪水了]定义一个名为CPe ...
- 修复 MySQL 数据库结构错误 – mysql_upgrade升级
http://www.cnblogs.com/wjoyxt/p/5477072.html 不知道是不是每次更新 MySQL 软件之后都需要执行数据库升级指令?在我进行过的几次软件升级之后,总会在 My ...
- C#多线程交替赋值取值
static AutoResetEvent auto=new AutoResetEvent(false); ; ; static void Main() { Thread th1 = new Thre ...
- Spark on Yarn遇到的问题及解决思路
原文:http://www.aboutyun.com/thread-9425-1-1.html 问题导读1.Connection Refused可能原因是什么?2.如何判断内存溢出,该如何解决?扩展: ...
- Spring3之Security
1.spring security介绍 Spring Security原来叫做Acegi Security,可用于加强任何Java应用的安全,但是最常用于基于Web的应用.下面首先理解几个安全术语: ...