突然要用到发邮件,今天看了下javamail,从网上找了个例子,自己改了改,调通了,放到这里,以便今后使用 :arrow: [color=blue]除原有功能外,增加定时发送的功能,增加消除邮件中的乱码解决方法,即通过服务器自动发送时,邮件标题,内容,发件人,收件人不会出现乱码,已经测试过,没问题[/color] :arrow:

/**
* 除原有功能外,增加定时发送的功能
* 增加消除邮件中的乱码解决方法,
* 即通过服务器自动发送时,邮件标题,内容,发件人,收件人不会出现乱码
* 已经测试过,没问题
*/
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 可以发邮件,发附件(附件大小可以超过2M),抄送多人,抄送密件,定时发送,消除乱码[附javamail的jar包]...相关推荐

  1. Qt通讯录(语音输入+发邮件+发短信+头像)

    Qt通讯录(语音输入+发邮件+发短信+头像) 项目背景 功能 运行程序 关键技术 语音识别ASR 发送电子邮件 AddressBook5.0 Gitee地址 项目背景 作为一个Qt小白,迫于大一下学期 ...

  2. 发邮件怎么把附件内容直接显示_优德分享:如何发邮件会让人觉得你更靠谱?...

    在职场,邮件甚至比见面.比开会还要重要.你有没有收到过这样的电子邮件?发件人叫"还好只是近黄昏":邮件的标题是:"你好!"你觉得,这一定是漏网的垃圾邮件,但还是 ...

  3. javaMai+Springl实现给QQ邮箱发邮件(带附件,html格式)

    以前的时候想着java发邮件很简单,因为当时使用的是outlook实现的,有兴趣的可以去看看之前的两篇博客文章,1.使用java底层实现邮件的发送(含测试,源码)   和 2.使用Spring实现邮件 ...

  4. c++ 发邮件(含附件)

    本程序在vs2013测试通过,一共3个文件,发邮件的程序封装为Csmtp 类. 1,测试用的主函数 #include "Csmtp.h" #pragma comment(lib, ...

  5. python发邮件,添加附件

    需要用到smtp.SMTP_SSL(host,post) # 设置邮箱账号 account = input('请输入邮箱账户:') # 设置邮箱授权码 token = input('请输入邮箱授权码: ...

  6. 发邮件怎么把附件内容直接显示_一年一度调剂忙,且看招生老师怎么说

    本人刚刚参加工作没几年,在某学校任职.因为是年轻人,所以连续两年,招生调剂的工作都交给我负责.不得不说,这是一份非常繁琐辛苦的工作.但是,当年我考研的时候也是经历了一志愿失败-->调剂失败--& ...

  7. 发邮件窗体【支持编辑邮件模板,使用wse多线程上传附件及发邮件(带附件)】以及在服务器端自动发邮件...

    这是前段时间做的一个邮件客户端,支持自定义模板(模板是内置的,固定好了)           其中配置模板的xml <?xml version="1.0" encoding= ...

  8. 用python发邮件、添加附件

    python 发邮件 两个内置模块:smtplib .email 需要了解附件以什么形式添加到邮件中(open方法.二进制.字节) 什么是授权码 能够看懂邮件发送过程中的发送编码(发送成功.发送失败. ...

  9. java 发邮件email, 附件名字太长,乱码的问题

    参考链接:https://www.jianshu.com/p/877ffa20ebc2  和  https://blog.csdn.net/z69183787/article/details/7923 ...

最新文章

  1. 用C#去除代码的SourceSafe管理
  2. OptiTrack专为VR主题公园推出了主动追踪方案,可降低40%成本
  3. Dataset之Handwritten Digits:Handwritten Digits(手写数字图片识别)数据集简介、安装、使用方法之详细攻略
  4. 360 mysql无法启动_安装MySQL 5后无法启动(不能Start service)解决方法小结
  5. ios kb转m_iOS 音频录音和格式转换
  6. 动态网页开发技术(一):Servlet
  7. 331页!2021年的精华尽在这本数据库技术年刊
  8. [洪流学堂]Hololens开发入门篇3:使用基本功能开发一个小应用
  9. 使用ceph-deploy搭建三节点ceph集群
  10. pytorch1.0神经网络保存、提取、加载
  11. python批量安装第三方库_使用Python批量安装第三方库
  12. Acrobat Pro DC 教程,如何共享 PDF 文件以供审阅?
  13. 批量更改文件的后缀名
  14. 直播回顾 丨TBase多中心多活与高可用方案实践
  15. 数据恢复(数据已经恢复)-附带软件Recoverit
  16. 大天使之剑服务器维修公告,大天使之剑————【维护】6月12日更新维护公告...
  17. gvim中利用录制宏产生连续数字
  18. idea 设置编辑器 table 全部显示
  19. gta5的服务器状态,Gta5OL一直处于加载过程中,你可能遇到了这些问题
  20. H5获取手机GPS定位

热门文章

  1. redis安装、持久化、数据类型、常用操作、操作键值、安全设置、慢查询日志、存储session、主从配置、集群介绍、集群搭建配置、集群操作,php安装redis扩展...
  2. 20155305乔磊2016-2017-2《Java程序设计》第一周学习总结
  3. 发现今年是阿里和腾讯这么多年来最大规模的校招
  4. 不使用root权限安装zsh和oh-my-zsh
  5. java窗口程序实例_Java Swing快速构建窗体应用程序
  6. [转载]我爱我妻----让男人看一遍哭一遍的文章
  7. Tiny4412使用汇编点亮LED,实现流水灯效果
  8. try 在java中的含义_java中try的含义
  9. 源码学习 - 【FreeRTOS】PRIVILEGED_FUNCTION 含义理解
  10. 人世温情:100个程序员的十年故事(上)