JavaShuo
栏目
标签
JavaMail发送邮件
时间 2019-11-13
标签
javamail
发送
邮件
栏目
Java
繁體版
原文
原文链接
今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。为了之后使用方便,本身写了段代码,打成jar包,以方便之后使用。呵呵
如下三段代码是个人所有代码,朋友们若是想用,直接复制便可。jar包由于我不知道怎么传到javaeye上,因此朋友们回去本身打吧。
个人代码有三个类:
第一个类:MailSenderInfo.java
Java代码
package
com.util.mail;
/**
* 发送邮件须要使用的基本信息
*/
import
java.util.Properties;
public
class
MailSenderInfo {
// 发送邮件的服务器的IP和端口
private
String mailServerHost;
private
String mailServerPort =
"25"
;
// 邮件发送者的地址
private
String fromAddress;
// 邮件接收者的地址
private
String toAddress;
// 登录邮件发送服务器的用户名和密码
private
String userName;
private
String password;
// 是否须要身份验证
private
boolean
validate =
false
;
// 邮件主题
private
String subject;
// 邮件的文本内容
private
String content;
// 邮件附件的文件名
private
String[] attachFileNames;
/**
* 得到邮件会话属性
*/
public
Properties getProperties(){
Properties p =
new
Properties();
p.put(
"mail.smtp.host"
,
this
.mailServerHost);
p.put(
"mail.smtp.port"
,
this
.mailServerPort);
p.put(
"mail.smtp.auth"
, validate ?
"true"
:
"false"
);
return
p;
}
public
String getMailServerHost() {
return
mailServerHost;
}
public
void
setMailServerHost(String mailServerHost) {
this
.mailServerHost = mailServerHost;
}
public
String getMailServerPort() {
return
mailServerPort;
}
public
void
setMailServerPort(String mailServerPort) {
this
.mailServerPort = mailServerPort;
}
public
boolean
isValidate() {
return
validate;
}
public
void
setValidate(
boolean
validate) {
this
.validate = validate;
}
public
String[] getAttachFileNames() {
return
attachFileNames;
}
public
void
setAttachFileNames(String[] fileNames) {
this
.attachFileNames = fileNames;
}
public
String getFromAddress() {
return
fromAddress;
}
public
void
setFromAddress(String fromAddress) {
this
.fromAddress = fromAddress;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String password) {
this
.password = password;
}
public
String getToAddress() {
return
toAddress;
}
public
void
setToAddress(String toAddress) {
this
.toAddress = toAddress;
}
public
String getUserName() {
return
userName;
}
public
void
setUserName(String userName) {
this
.userName = userName;
}
public
String getSubject() {
return
subject;
}
public
void
setSubject(String subject) {
this
.subject = subject;
}
public
String getContent() {
return
content;
}
public
void
setContent(String textContent) {
this
.content = textContent;
}
}
第二个类:SimpleMailSender.java
Java代码
package
com.util.mail;
import
java.util.Date;
import
java.util.Properties;
import
javax.mail.Address;
import
javax.mail.BodyPart;
import
javax.mail.Message;
import
javax.mail.MessagingException;
import
javax.mail.Multipart;
import
javax.mail.Session;
import
javax.mail.Transport;
import
javax.mail.internet.InternetAddress;
import
javax.mail.internet.MimeBodyPart;
import
javax.mail.internet.MimeMessage;
import
javax.mail.internet.MimeMultipart;
/**
* 简单邮件(不带附件的邮件)发送器
*/
public
class
SimpleMailSender {
/**
* 以文本格式发送邮件
* @param mailInfo 待发送的邮件的信息
*/
public
boolean
sendTextMail(MailSenderInfo mailInfo) {
// 判断是否须要身份认证
MyAuthenticator authenticator =
null
;
Properties pro = mailInfo.getProperties();
if
(mailInfo.isValidate()) {
// 若是须要身份认证,则建立一个密码验证器
authenticator =
new
MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
try
{
// 根据session建立一个邮件消息
Message mailMessage =
new
MimeMessage(sendMailSession);
// 建立邮件发送者地址
Address from =
new
InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 建立邮件的接收者地址,并设置到邮件消息中
Address to =
new
InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(
new
Date());
// 设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 发送邮件
Transport.send(mailMessage);
return
true
;
}
catch
(MessagingException ex) {
ex.printStackTrace();
}
return
false
;
}
/**
* 以HTML格式发送邮件
* @param mailInfo 待发送的邮件信息
*/
public
static
boolean
sendHtmlMail(MailSenderInfo mailInfo){
// 判断是否须要身份认证
MyAuthenticator authenticator =
null
;
Properties pro = mailInfo.getProperties();
//若是须要身份认证,则建立一个密码验证器
if
(mailInfo.isValidate()) {
authenticator =
new
MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
try
{
// 根据session建立一个邮件消息
Message mailMessage =
new
MimeMessage(sendMailSession);
// 建立邮件发送者地址
Address from =
new
InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 建立邮件的接收者地址,并设置到邮件消息中
Address to =
new
InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(
new
Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart =
new
MimeMultipart();
// 建立一个包含HTML内容的MimeBodyPart
BodyPart html =
new
MimeBodyPart();
// 设置HTML内容
html.setContent(mailInfo.getContent(),
"text/html; charset=utf-8"
);
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
// 发送邮件
Transport.send(mailMessage);
return
true
;
}
catch
(MessagingException ex) {
ex.printStackTrace();
}
return
false
;
}
}
第三个类:MyAuthenticator.java
Java代码
package
com.util.mail;
import
javax.mail.*;
public
class
MyAuthenticator
extends
Authenticator{
String userName=
null
;
String password=
null
;
public
MyAuthenticator(){
}
public
MyAuthenticator(String username, String password) {
this
.userName = username;
this
.password = password;
}
protected
PasswordAuthentication getPasswordAuthentication(){
return
new
PasswordAuthentication(userName, password);
}
}
下面给出使用上面三个类的代码:
Java代码
public
static
void
main(String[] args){
//这个类主要是设置邮件
MailSenderInfo mailInfo =
new
MailSenderInfo();
mailInfo.setMailServerHost(
"smtp.163.com"
);
mailInfo.setMailServerPort(
"25"
);
mailInfo.setValidate(
true
);
mailInfo.setUserName(
"han2000lei@163.com"
);
mailInfo.setPassword(
"**********"
);
//您的邮箱密码
mailInfo.setFromAddress(
"han2000lei@163.com"
);
mailInfo.setToAddress(
"han2000lei@163.com"
);
mailInfo.setSubject(
"设置邮箱标题"
);
mailInfo.setContent(
"设置邮箱内容"
);
//这个类主要来发送邮件
SimpleMailSender sms =
new
SimpleMailSender();
sms.sendTextMail(mailInfo);
//发送文体格式
sms.sendHtmlMail(mailInfo);
//发送html格式
}
最后,给出朋友们几个注意的地方:
一、使用此代码你能够完成你的javamail的邮件发送功能。三个类缺一不可。
二、这三个类我打包是用的
com.util.mail
包,若是不喜欢,你能够本身改,但三个类文件必须在同一个包中
三、不要使用你刚刚注册过的邮箱在程序中发邮件,若是你的163邮箱是刚注册不久,那你就不要使用
“smtp.163.com”
。由于你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能经过验证。要使用你常常用的邮箱,并且时间比较长的。
四、另外一个问题就是
mailInfo.setMailServerHost("smtp.163.com");
与
mailInfo.setFromAddress("han2000lei@163.com");
这两句话。即若是你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,若是不的话,是不会发送成功的。
五、关于javamail验证错误的问题,网上的解释有不少,但我看见的只有一个。就是个人第三个类。你只要复制全了代码,我想是不会有问题的。
相关文章
1.
javamail邮件发送
2.
Javamail发送邮件
3.
javaMail发送邮件
4.
JavaMail发送邮件
5.
javamail发送邮件
6.
JavaMail邮件发送
7.
javamail 发送邮件
8.
javamail 发送、读取邮件
9.
javamail发送邮件问题
10.
spring JavaMail 邮件发送
更多相关文章...
•
PHP 发送电子邮件
-
PHP教程
•
ASP 使用 CDOSYS 发送电子邮件
-
ASP 教程
•
PHP开发工具
•
JDK13 GA发布:5大特性解读
相关标签/搜索
邮件推送
javamail
收发邮件
邮件
发送
电子邮件
垃圾邮件
163邮箱发送实例
送送
Java
PHP教程
MySQL教程
SQLite教程
插件
开发工具
文件系统
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
Android Studio3.4中出现某个项目全部乱码的情况之解决方式
2.
Packet Capture
3.
Android 开发之 仿腾讯视频全部频道 RecyclerView 拖拽 + 固定首个
4.
rg.exe占用cpu导致卡顿解决办法
5.
X64内核之IA32e模式
6.
DIY(也即Build Your Own) vSAN时,选择SSD需要注意的事项
7.
选择深圳网络推广外包要注意哪些问题
8.
店铺运营做好选款、测款的工作需要注意哪些东西?
9.
企业找SEO外包公司需要注意哪几点
10.
Fluid Mask 抠图 换背景教程
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
javamail邮件发送
2.
Javamail发送邮件
3.
javaMail发送邮件
4.
JavaMail发送邮件
5.
javamail发送邮件
6.
JavaMail邮件发送
7.
javamail 发送邮件
8.
javamail 发送、读取邮件
9.
javamail发送邮件问题
10.
spring JavaMail 邮件发送
>>更多相关文章<<