突然要用到发邮件,今天看了下javamail,从网上找了个例子,自己改了改,调通了,放到这里,以便今后使用
除原有功能外,增加定时发送的功能,增加消除邮件中的乱码解决方法,即通过服务器自动发送时,邮件标题,内容,发件人,收件人不会出现乱码,已经测试过,没问题
/**
* 除原有功能外,增加定时发送的功能
* 增加消除邮件中的乱码解决方法,
* 即通过服务器自动发送时,邮件标题,内容,发件人,收件人不会出现乱码
* 已经测试过,没问题
*/
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Timer;
import java.util.TimerTask;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
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;
import javax.mail.internet.MimeUtility;
class PopupAuthenticator extends Authenticator {
public static final String mailuser=""; // 邮箱名,@之前的
public static final String password=""; // 邮箱密码
public static final String subject = "Javamal发送测试";
// 设置多个抄送人
public static final String[] cc = {"",""};
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(mailuser,password);
}
}
public class test{
// props.put("mail.transport.protocol", "smtp"); //使用smtp协议
public static void main(String[] args){
new test().beepForAnHour();
}
public void test_main() throws MessagingException, UnsupportedEncodingException{
Properties props = new Properties();
props.put("mail.smtp.host","smtp.qq.com");
props.put("mail.smtp.auth","true"); // 是否需要身份验证
PopupAuthenticator auth = new PopupAuthenticator();
Session session = Session.getInstance(props, auth);
session.setDebug(true); //主要是利于调试,默认为false
// 发件人
Address addressFrom = new InternetAddress(PopupAuthenticator.mailuser+"@qq.com", MimeUtility.encodeWord("自动发送的测试员","utf-8", "Q"));
// 收件人
Address addressTo = new InternetAddress("", MimeUtility.encodeWord("自动发送的测试员","utf-8","Q"));
// 密件收件人
Address addressBCC = new InternetAddress("","自动发送的测试员");
MimeBodyPart textBodyPart=new MimeBodyPart();
textBodyPart.setText("邮件成功发送,且无乱码"); // 邮件内容
MimeBodyPart fileBodyPart=new MimeBodyPart();
FileDataSource fds=new FileDataSource("");//要发送的附件地址
fileBodyPart.setDataHandler(new DataHandler(fds));
fileBodyPart.setFileName(fds.getName());// 设置附件的名称
Multipart container=new MimeMultipart();
container.addBodyPart(textBodyPart);
container.addBodyPart(fileBodyPart);
try{
MimeMessage message = new MimeMessage(session);
message.setSentDate(new Date());// 设置发送时间
message.setSubject(PopupAuthenticator.subject,"utf-8");// 设置邮件主题的编码格式
message.setFrom(addressFrom); // 发件人
if(null != addressTo){
message.addRecipient(Message.RecipientType.TO,addressTo);// 收件人
}
if(null != PopupAuthenticator.cc){
Address[] ccAdresses = new InternetAddress[PopupAuthenticator.cc.length];
for (int i=0; i<PopupAuthenticator.cc.length; i++){
ccAdresses[i] = new InternetAddress(PopupAuthenticator.cc[i]);
}
// 将抄送者信息设置到邮件信息中
message.setRecipients(Message.RecipientType.CC, ccAdresses);
}
if(null != addressBCC){
// message.addRecipient(Message.RecipientType.BCC, addressBCC);// 设置密件抄送
}
message.setContent(container,"utf-8"); // 添加 文本文件和附件
message.saveChanges();
Transport transport = session.getTransport("smtp");
// host,user,password
transport.connect("smtp.qq.com", PopupAuthenticator.mailuser,PopupAuthenticator.password);
Transport.send(message);
transport.close();
}catch (MessagingException mex) {
System.out.println("send failed, exception: " + mex);
}
}
public void beepForAnHour() {
TimerTask task = new TimerMask1();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date_str = null;
try {
date_str = sdf.parse("2011-01-28 10:35:00");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Date date = date_str;
Timer timer = new Timer();
timer.schedule(task, date, 10000);
}
}
class TimerMask1 extends TimerTask {
public void run() {
java.sql.Time sTime = new java.sql.Time(new Date().getTime());
System.out.println("现在时间 " + sTime);
try {
new test().test_main();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-----------------------------
注意:上面用的是QQ邮箱来发送的,所以要加上QQ的SMTP,而且要把QQ邮箱里的SMTP打开,打开可以参考 http://service.mail.qq.com/cgi-bin/help?subtype=1&no=166&id=28
不打开,就发不了
进入方法:google上输入“QQ邮箱”--登入--账户--POP3/IMAP/SMTP服务 中的 开启POP3/SMTP服务 打上勾 就可以了
分享到:
相关推荐
JavaMail实现邮件发送功能,可发送、抄送、密送多人,支持多附件的发送。配置相关参数后可直接调用发送邮件
这是我项目中自用的javamail,可通过定时任务自动发送邮件,可以发送多人,抄送多人(但没有测试过发送人的数量上限),可以带附件,邮件正文有一个表单,表单下面还嵌入了一张饼图的png图片,满足了一般的发送邮件...
介绍了如何利用javamail实现给多人发送电子邮件,附有代码
javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码 查看debug 邮件处理过程发现邮件头没有编译, 内容是base64编码,所以邮箱收不到或者收到的是base64编码后的一堆乱码,
如何用javamail定时发送邮件
介绍了如何利用javamail实现带附件的邮件发送,附有代码
如何用javamail定时发送邮件.doc
该资源是一个javamail发送邮件的例子,里面集成了别人的文件发送的功能,单次发送邮件只能上传一个附件。是一个测试方法,拿过来改一改邮件的地址和密码就可以使用了
基于javamail1.4实现邮件发送,支持多收件人、抄送人、多附件等
使用JAVAMail代发邮件 资源源于不但搜索,自由源于不但努力
里面详细的介绍了JavaMail发邮件(包括单个附件和多个附件)的机制,还有JavaMail正常使用所需要的JAR包,源程序例子经过本人详细且严格的测试,大家下载下来就可以直接使用啦。
JavaMail邮件发送(带附件)
javaMail
javaMail 用附件路径,文件流 byte[] 或 base64 字符串 实现发送附件功能
本人最新写了一个邮件收发的例子,可以处理中文的 包括发送附件,附件标题也可以是中文的,可以给大 家参考下!希望能给大家一些帮助!
配置好用户名密码以及SMTP服务器就可以直接运行。已包含相关jar
javamail发送邮件,带附件。发邮件可以看看。
此源码是使用javamail发送邮件,可以实现静默发送邮件,可以发送附件资源等。有相应的使用说明,快捷好用
javaMail发送邮件服务,附源码,源码亲测有效,采用maven工程,也包含mail-1.4.7.jar包
在spring利用javamail,quartz定时发送邮件