public class MailSender {
final static Logger logger = Logger.getLogger(MailSender.class);
/**
* 发送简单邮件
* @param str_from:发件人地址
* @param str_to:收件人地址
* @param str_title:邮件标题
* @param str_content:邮件正文
* @param emailPwd:邮件密码
*/
@SuppressWarnings("finally")
public static void send(String str_to, String str_title,String str_content){
boolean flog=false;
logger.info("sending... To: " + str_to + " Mail Title: " + str_title + " fileAttachment: " + str_content);
Properties props = new Properties();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); try {
props.load(classLoader.getResourceAsStream("mail.properties")); //使用property读取文件
} catch (IOException e) {
e.printStackTrace();
}
String str_from = props.getProperty("mail.from");
String emailPwd = props.getProperty("mail.password");

final String mailServer_163 = props.getProperty("mail.smtp.163.mailServer");
final String mailServer_qq = props.getProperty("mail.smtp.qq.mailServer");
final String mailServer_Sina = props.getProperty("mail.smtp.sina.mailServer");
String mailServer = "";
String emailType = Tools.subString(str_from, "@"); //截取@前
String eName = Tools.subberString(str_from,"@");
if (emailType.trim() != "" && emailType.equals("qq.com")) {
mailServer = mailServer_qq;
}
if (emailType.trim() != "" && emailType.equals("163.com")) {
mailServer = mailServer_163;
}
if (emailType.trim() != "" && emailType.equals("sina.com.cn")) {
mailServer = mailServer_Sina;
}
if (emailType.trim() != "" && emailType.equals("sina.com")) {
mailServer = mailServer_Sina;
}
// 存储发送邮件服务器的信息
props.put("mail.smtp.host", mailServer);
// 同时通过验证
props.put("mail.smtp.auth", "true");
// 根据属性新建一个邮件会话
Session s = Session.getInstance(props);
s.setDebug(true); // 有他会打印一些调试信息。
// 由邮件会话新建一个消息对象
MimeMessage message = new MimeMessage(s);
// 设置邮件
InternetAddress from = null;
try {
from = new InternetAddress(str_from);
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // pukeyouxintest2@163.com
try {
message.setFrom(from);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 设置发件人的地址
// //设置收件人,并设置其接收类型为TO
InternetAddress to = null;
try {
to = new InternetAddress(str_to);
} catch (AddressException e) {
e.printStackTrace();
}
try {
message.setRecipient(Message.RecipientType.TO, to);
// 设置标题
message.setSubject(str_title); // java学习
// 设置信件内容
// message.setText(str_content); //发送文本邮件 //你好吗?
message.setContent(str_content, "text/html;charset=gbk"); // 发送HTML邮件
// 设置发信时间
message.setSentDate(new Date());
// 存储邮件信息
message.saveChanges();
} catch (MessagingException e) {
e.printStackTrace();
} // 发送邮件
Transport transport = null;
try {
transport = s.getTransport("smtp");
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 以smtp方式登录邮箱,第一个参数是发送邮件用的邮件服务器SMTP地址,第二个参数为用户名,第三个参数为密码
try {
transport.connect(mailServer, eName, emailPwd) ;
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送邮件,其中第二个参数是所有已设好的收件人地址
try {
transport.sendMessage(message, message.getAllRecipients());
} catch (MessagingException e) {
e.printStackTrace();
}
try {
transport.close();
} catch (MessagingException e) {
e.printStackTrace();
} } /**
* 异步发送邮件的方法*/
public static void sendMailByAsynchronous(final String str_to, final String str_title, final String str_content) throws Exception{
new Thread(new Runnable() {
public void run() {
try {
MailSender.send(str_to, str_title, str_content);
} catch (Exception ex) {
logger.error("mail sender error To: " + str_to
+ " Mail Title: " + str_title + " fileAttachment: "
+ str_content, ex);
}
}
}).start();
} }

 mail.properties

mail.smtp.163.mailServer=smtp.163.com

mail.smtp.qq.mailServer=smtp.qq.com

mail.smtp.sina.mailServer=smtp.sina.com.cn

mail.username=asd

mail.password=123456

mail.from=asd@163.com

 Tool.java

public class Tools {
public static String subString(String content,String start){
String subConetent=content.substring(content.indexOf(start)+1, content.length());
return subConetent;
}
public static String subberString(String content,String end){
String subConetent=content.substring(0,content.indexOf(end));
return subConetent;
}
}

调用方法:

MailSender.sendMailByAsynchronous("123@126.com","topic:"+a.getAskTitle(), "content:"+a.getAskContent()+"/n请你及时回复");

jar包:mai.jar

  

简单的邮件发送mail.jar的更多相关文章

  1. java简单的邮件发送

    java实现简单的邮件发送案例,学会了这个你就可以利用这个来整你的好友了,不断地给他进行邮箱轰炸(当然个人不建议瞎搞),最重要的是明白其中的原理最好了.话不多说,直接看代码案例了.首先需要导入的jar ...

  2. .Net(C#)最简单的邮件发送案例

    一.序言 刚开始接触邮件发送功能的时候,在网上找的资料都挺复杂的!对于新手入门有点难(至少对于本人来说,第一次接触的时候确实不容易).这里就写一段简单的邮箱发送代码,备忘,也给新手一个参考(相关类的字 ...

  3. mailto - 简单多媒体邮件发送程序

    SYNOPSIS mailto  [-a] [-c] [-s] [recipient name(s)] DESCRIPTION mailto 程序是一个用于发送MIME格式的多媒体邮件(MIME格式是 ...

  4. 发送邮件(遵循smtp协议即简单的邮件发送协议)

    HandleSendEmail.aspx逻辑 protected void Page_Load(object sender,EventArgs e) { foreach(var item in Req ...

  5. [PHP] 邮件发送mail()函数失败问题 sendmail命令与postfix

    1. php的mail()函数是可以发送邮件的 , 但是一直就没有测试成功过 , 现在总结一下原因 : php的mail函数 基于sendmail命令来发送 , sendmail命令需要安装postf ...

  6. [vb.net]最简单的邮件发送

    Imports Microsoft.Office.Interop.Outlook Private Sub sendMail() Dim outObj As New Application Dim it ...

  7. 通过smtp协议简单实现邮件发送

    使用到的类: ①SmtpClient--发送邮件的类(using System.Net.Mail;) ②MailMessage--初始化邮件的类 ③ NetworkCredential--身份验证的类 ...

  8. C#真他妈神奇,一个函数都不用写就能实现一个简单的邮件发送工具

    MailMessage EmaillMessage = new MailMessage(   //创建一个对象                    new MailAddress(loning.Te ...

  9. Java Mail 邮件发送Demo

    上周公司的项目要求开发邮件发送功能.自己在网上跟着教程边学边做了一下午,现在基本开发完成了.由于一个同事也想看下该怎么写,顺便学习下.所以我就写成了一遍教程,顺便巩固下邮件发送里面的内容. Demo ...

随机推荐

  1. laravel ajax提交登陆存储session,并输出

    前端输出session {{ Session::get('username') }} ajax提交 <div>{{ Session::get('username') }}</div& ...

  2. 通俗理解 React 高阶函数

    定义:高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件. A higher-order component is a function that takes a componen ...

  3. day3字符串操作作业详解

    1.day3题目 1.有变量name = "aleX leNb" 完成如下操作: 1) 移除 name 变量对应的值两边的空格,并输出处理结果 2) 移除name变量左边的&quo ...

  4. python进阶04 装饰器、描述器、常用内置装饰器

    python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...

  5. Hive进阶_Hive数据的导入

    使用Load语句执行数据的导入 语法: load data [local] inpath 'filepath' [overwrite] into table tablename [partition ...

  6. struts的logic标签和<bean:write/>详情

    https://baike.baidu.com/item/Logic%E6%A0%87%E7%AD%BE/2292947?fr=aladdin https://blog.csdn.net/applea ...

  7. PT100/PT1000

    热敏电阻:互换性差,非线性严重,测量范围窄-50~300℃. 金属电阻:准备稳定可靠.-200~500℃ PT100:测量范围宽比PT1000宽,分辨率比PT1000低(100倍,即PT1000每变化 ...

  8. 《javascript设计模式》笔记之第十二章:装饰者模式

    一.装饰者模式的作用 为函数或者对象的方法添加一些行为.     二.装饰者模式的原理 装饰者模式不是直接修改对象,而是以要修改的对象为基础,新建一个对象.不过这个新建的对象看起来就像在原对象的基础上 ...

  9. 洛谷P2062 分队问题(dp)

    题意 题目链接 给定n个选手,将他们分成若干只队伍.其中第i个选手要求自己所属的队伍的人数大等于a[i]人. 在满足所有选手的要求的前提下,最大化队伍的总数. 注:每个选手属于且仅属于一支队伍. So ...

  10. 编写xcode5插件需要增加DVTPlugInCompatibilityUUIDs

    之前使用的xcode4.6的插件在升级到xcode5后不能使用了,查了很多资料,终于知道是缺少了DVTPlugInCompatibilityUUIDs 请在插件项目plist文件中加入DVTPlugI ...