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表结构导出成Excel格式的(并带备注)
http://www.liangchan.net/liangchan/4561.html 1.使用一个mysql管理工具:SQLyog,点击菜单栏“数据库”下拉的最后一项: 导出的格式如下: 2.要想 ...
- C语言用static限制函数以及全局变量的作用域
今天才发现这个东西! C语言中没有public private之类的东西. 如果一个函数或者一个全局变量只想在一个.c文件中使用,可以在前面加上static! 以前我还傻傻的每个.c文件中的函数都加一 ...
- Android学习笔记(20)————利用ListView制作带竖线的多彩表格
http://blog.csdn.net/conowen/article/details/7421805 /********************************************** ...
- [Javascript] Functor law
Functor laws: 1. Identity: map(id) == id 2. Composition: compose(map(f), map(g)) == map(compose(f,g) ...
- 几种流行Webservice框架性能对照
转自[http://blog.csdn.net/thunder4393/article/details/5787121],写的非常好,以收藏. 1 摘要 开发webservice应用程序中 ...
- SAP SOAMANAGER 配置WEBSERVICE 提示:Service cannot be reached解决方法
TM中有些服务没有被激活,以UI界面个性化设置化设置为例: 如果服务没有被激活,打开界面就会显示: 这时候右键点击属性,获取服务ID: 通过事务代码SICF,输入服务ID:wd_analyze_con ...
- mysql online ddl2
大家知道,互联网业务是典型的OLTP(online transaction process)应用,这种应用访问数据库的特点是大量的短事务高并发运行.因此任何限制高并发的动作都是不可接受的, ...
- 如何将一个 ASP.NET MVC 4 和 Web API 项目升级到 ASP.NET MVC 5 和 Web API 2
----转自微软官网www.asp.net/mvc/ ASP.NET MVC 5 和 Web API 2 带来的新功能,包括属性路由. 身份验证筛选器,以及更多的主机.请参阅http://www.as ...
- 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法
SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...
- jQuery Validate 插件[表单验证]
在客户端添加信息提交表单时我们经常需要做一些验证,比如验证不能为空,验证客户输入手机格式,验证客户输入email,url等的格式,我们可以通过EL表达式结合js 进行自主验证,今天总结一个JQuery ...