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. 它包括了发送电子邮件 ...
随机推荐
- 安装centreon
Centreon + nagios + ndoutils 安装 2013-09-25 19:42:44 标签:centreon 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者 ...
- CentOS 6系统下安装 JDK1.6
CentOS 6系统下安装 JDK1.6 JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛的 ...
- WPF自己定义命令Command
一.自己定义命令 自己定义命令必需要实现ICommand接口.例如以下代码所看到的: /// <summary> /// 自己定义的清除命令. 光脚丫思考 2014-7-31 06:51: ...
- iOS开发——UI_swift篇&TableView实现页眉和页脚
TableView实现页眉和页脚 在UItableView中header和footer是很常见的,而且他能让你实现很复杂的功能,我们见过最多的就是下拉刷新和上啦加载更多,当然你还可以在上面添加一个 ...
- 用CSV文件读写数据的两种方式(转)
导读:有时候我们需要对收集的数据做统计,并在页面提供显示以及下载.除了对传统的excel存取之外,对CSV文件的存取也很重要.本文列出了这两种操作的详细代码. 代码: <?php $file = ...
- 清除XCode缓存和生成文件
1.Command-Option-Shift-K to clean out the build folder XCode4.2 finder中找到 /Users/apple/Library/ ...
- springMVC1 springmvc的基础知识
springmvc第一天 springmvc的基础知识 springmvc课程安排: 第一天: 基础知识 springmvc框架(重点) mvc在b/s系统中应用方式 springmvc框架原理(Di ...
- S_ISREG等几个常见的宏 struct stat
S_ISLNK(st_mode):是否是一个连接.S_ISREG(st_mode):是否是一个常规文件.S_ISDIR(st_mode):是否是一个目录S_ISCHR(st_mode):是否是一个字符 ...
- Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA).
Kernel典型相关分析 (一)KCCA 同样,我们可以引入Kernel函数,通过非线性的坐标变换达到之前CCA所寻求的目标.首先,假设映射$\Phi_X: x\rightarrow \Phi_X(x ...
- 关于“学习Linux用什么系统”的解答
首先,阐述一下,我个人的观点——这个问题我曾经也想了很久了,这绝不是长篇大论后就是简单一句,适合你的就是最好的.其实,很多人看到这一句,心里已经有成千上万个奔腾了(至少我当时是这样的),为什么?因为我 ...