据我自己实验的结果,邮件服务器使用smtp.163.com和smtp.yeah.net都可以,但是我直接使用smtp.qq.com和smtp.sina.com貌似都不行,不过收件地址qq和sina都可以用,大家要是需要测试的话,不妨去网易注册一个新用户,直接就可以用了,我刚新注册了一个163邮箱,可用。
经过网上查询并经过本人测试,sina和qq需要先在邮箱中开启pop3/smtp服务才能够发邮件,具体办法为进入邮箱:“设置”->“开启”pop3/smtp服务。
在使用测试本程序是需要两个jar包,mail.jar和activation.jar,可以在网搜索也可在本文末尾直接下载。
本程序能够实现发送邮件并添加附件的功能。
import java.io.Serializable;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
/**
* 实现一个java发送邮件的对象
* @author wangping1213
*
*/
public class Mail implements Serializable {
private static final long serialVersionUID = -3079057603211605487L;
/**
* MIME邮件对象
*/
private MimeMessage mimeMsg;
/**
* 邮件会话对象
*/
private Session session;
/**
* 系统属性
*/
private Properties props;
/**
* smtp是否需要认证
*/
private boolean needAuth = false;
/**
* smtp认证的用户名
*/
private String username = "";
/**
* smtp认证的密码
*/
private String password = "";
/**
* Multipart(抽象类)对象,
* 保存电子邮件内容的容器是Multipart抽象类,
* 它定义了增加和删除及获得电子邮件不同部分内容的方法.
*/
private Multipart mp;
/**
* 在构造Mail对象时的初始化工作
* @param smtp
*/
public Mail(String smtp) {
//设置SMTP主机(SMTP服务器)
setSmtpHost(smtp);
//创建一个邮件对象
createMimeMessage();
}
/**
* 设置SMTP主机
* @param hostName
*/
public void setSmtpHost(String hostName) {
System.out.println("设置系统属性:mail.stmp.host=" + hostName);
if (null == props) {
//获得系统属性对象
props = System.getProperties();
//设置SMTP主机
props.put("mail.smtp.host", hostName);
} //end if
}//end setSmtpHost
/**
* 创建MIME邮件对象
*/
public boolean createMimeMessage() {
try {
System.out.println("准备获取邮件会话对象!");
//获取邮件会话对象,需要一个授权抽象类的实现类
session = Session.getDefaultInstance(props, new Authenticator() {
//重写这个方法,这是授权类内部的要求
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
} catch (Exception e) {
System.err.println("获取邮件会话对象时发生错误!" + e);
return false;
}//end try-catch
System.out.println("准备创建MIME邮件对象");
try {
//创建MIME邮件对象
mimeMsg = new MimeMessage(session);
//创建一个multipart对象
mp = new MimeMultipart();
return true;
} catch (Exception e) {
System.err.println("创建MIME邮件对象失败!" + e);
return false;
} //end try-catch
} //end createMimeMessage()
/**
* 设置是否需要smtp身份认证
* @param need 是否需要身份认证
*/
public void setNeedAuth(boolean needAuth) {
System.out.println("设置smtp身份认证:mail.smtp.auth = " + needAuth);
if (null == props) { //判断是否已经取得系统属性对象
//取得系统属性对象
props = System.getProperties();
}// end if
//是否需要认证
this.needAuth = needAuth;
//设置是否需要认证
props.put("mail.smtp.auth", "" + this.needAuth);
}// end setNeedAuth()
/**
* 设置用户名和密码
* @param name 用户名
* @param pass 密码
*/
public void setNamePass(String name, String pass) {
System.out.println("程序得到用户名和密码");
//设置用户名和密码
username = name;
password = pass;
}// end setNamePass
/**
* 设置邮件主题
* @param mailSubject
* @return
*/
public boolean setSubject(String mailSubject) {
System.out.println("设置邮件主题!");
try {
//将邮件主题添加到邮件对象中
mimeMsg.setSubject(mailSubject);
return true;
} catch (MessagingException e) {
System.err.println("设置邮件主题错误!");
return false;
}//end try-catch
}//end setSubject()
/**
* 设置邮件体格式
* @param mailBody 邮件体
* @return 是否设置成功
*/
public boolean setBody(String mailBody) {
System.out.println("设置邮件体格式!");
//邮件体对象
BodyPart bp = new MimeBodyPart();
try {
//设置邮件体内容和格式
bp.setContent("<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>"
+ mailBody, "text/html;charset=utf-8");
//在multipart对象中添加邮件体对象
mp.addBodyPart(bp);
return true;
} catch (MessagingException e) {
System.err.println("设置邮件正文时发生错误!" + e);
return false;
}// end try-catch
}// end setBody()
/**
* 增加邮件附件
* @param filename 附件名称
* @return 是否添加成功
*/
public boolean addFileAffix(String filename) {
System.out.println("添加邮件附件!");
//邮件体对象
BodyPart bp = new MimeBodyPart();
//邮件附件源对象
FileDataSource fields = new FileDataSource(filename);
try {
//在邮件体对象中添加事件
bp.setDataHandler(new DataHandler(fields));
//在邮件体对象中设置附件名
bp.setFileName(fields.getName());
//在multipart对象中添加邮件体对象
mp.addBodyPart(bp);
return true;
} catch (MessagingException e) {
System.err.println("增加邮件附件" + filename + "发生错误! " + e);
return false;
}// end try-catch
}// end addFileAffix()
/**
* 设置发信人
* @param from 发信人
* @return 设置发信人是否成功
*/
public boolean setFrom(String from) {
System.out.println("设置发信人!");
try {
//在邮件对象设置发信人
mimeMsg.setFrom(new InternetAddress(from));
return true;
} catch (Exception e) {
System.err.println("设置发信人出错!" + e);
return false;
}// end try-catch
}// end setFrom()
/**
* 设置收信人
* @param to 收信人
* @return 设置收信人是否成功
*/
public boolean setTo(String to) {
System.out.println("设置收信人!");
try {
//在邮件对象中设置收信人
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
return true;
} catch (Exception e) {
System.err.println("设置收信人!" + e);
return false;
}// end try-catch
}// end setTo()
/**
* 发送附件到
* @param copyTo 发送附件的地址
* @return 发送附件是否成功
*/
public boolean setCopyTo(String copyTo) {
System.out.println("发送附件到");
if (null == copyTo) {
return false;
}//end if
try {
//在邮件对象中设置发送附件地址
mimeMsg.setRecipients(Message.RecipientType.CC,
(Address[]) InternetAddress.parse(copyTo));
return true;
} catch (Exception e) {
System.err.println("发送附件失败!" + e);
return false;
}// end try-catch
}// end setCopyTo()
/**
* 发送邮件
* @return 发送邮件是否成功
*/
public boolean sendout() {
try {
//邮件对象中设置multipart对象(内容体)
mimeMsg.setContent(mp);
//邮件对象保存更新
mimeMsg.saveChanges();
System.out.println("正在发送邮件...");
session.setDebug(true);
//发送信息类,使用Session类的getTransport方法,并使用smtp协议
Transport transport = session.getTransport("smtp");
//连接服务器,使用用户名,密码
transport.connect(props.getProperty("mail.smtp.host"), username, password);
//设置邮件对象
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
System.out.println("发送邮件成功!");
//关闭传输对象
transport.close();
return true;
} catch (MessagingException e) {
System.err.println("邮件发送失败!" + e);
return false;
}// end try-catch
}// end sendout()
/**
* main方法
* @param args 参数
*/
public static void main(String[] args) {
//实体内容
String mailBody = "<font color='red'>欢迎光临</font><a href='www.baidu.com'>我的邮件测试</a>";
//邮件实体
Mail theMail = new Mail("smtp.163.com");
//设置验证
theMail.setNeedAuth(true);
//设置主题
if (theMail.setSubject("邮件测试") == false) {
return;
}// end if
//邮件内容,支持html如<font color='red'>欢迎光临</font><a href='#'>邮件测试</a>
if (theMail.setBody(mailBody) == false) {
return;
}// end if
//设置发件人
if (theMail.setFrom("发件人@163.com") == false) {
return;
}// end if
//设置收件人
if (theMail.setTo("收件人@qq.com") == false) {
return;
}// end if
//添加附件
if (theMail.addFileAffix("附件的地址") == false) {
return;
}// end if
//设置发件人的用户名和密码
theMail.setNamePass("发件人用户名", "发件人密码");
//发送邮件
if (theMail.sendout() == false) {
return;
}// end if
}// end main()
}//end class Mail
分享到:
相关推荐
使用JAVAMail代发邮件 资源源于不但搜索,自由源于不但努力
java使用javaMail发送邮件,包含项目源文件及jar包。
简单的使用javamail发送邮件例子,基本满足普通邮件发送的需求;程序运行后可以直接执行test.java文件进行测试。
java 发邮件java 发邮件java 发邮件java 发邮件
纯java发送简单邮件的功能,支持嘱性文件的配置,可配多人接收,多个附件,简单。。。
javamail 回执邮件资料
java javamail 发送邮件 源代码 讲的很详细 例子
JavaMail实现邮件发送的简单封装(包括文本、图片、html、附件) 详见http://blog.csdn.net/lyisray/article/details/42002215
javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码 查看debug 邮件处理过程发现邮件头没有编译, 内容是base64编码,所以邮箱收不到或者收到的是base64编码后的一堆乱码,
javaMail发送邮件服务,附源码,源码亲测有效,采用maven工程,也包含mail-1.4.7.jar包
资源包括邮件的发送、邮件的接收、查看邮件总数量和未读邮件数以及查看未读邮件并标记已读,还有我自己编写的简单的文档。希望能帮助需要帮助的筒子们
使用Java完成的简单邮箱系统,界面由Java Swing实现,具有以下功能: 1、邮件收发等邮箱基本功能 2、可设置黑名单、白名单,并过滤邮件 3、使用朴素贝叶斯算法检测评估邮件是否为垃圾邮件
JSP与JavaMail发送HTML格式... java,javamail发送html邮件..
java web通过javamail实现邮件的发送接收功能。实现了邮件的发送并带有附件的功能。
用javaMail实现公司内网邮箱邮件发送,包括邮件附件,邮件发送人和抄送人
javamail批量发送邮件
能模拟电子邮件的发送,包括qq、sina(新浪)、163等邮件,使用SMTP协议(smtp.qq.com smtp.sina.com smtp.163.com)
Java邮件发送javamail
javamail 发送收取邮件
Javamail发送邮件类库,Java发送邮件需要用到该类库