java中利用commons-email-1.2.jar实现简单的发邮件

1、首先引入commons-email-1.2.jar包

2、直接看代码吧commons-email-1.2.jar中已经为我们已经封装好了方法

a、先来一个简单的不能发附件的

public class TestCommonEmail {

public static void main(String[] args) {

SimpleEmail simpleEmail = new SimpleEmail();

// 设置使用发送邮件的邮件服务器若使用qq是smtp.qq.com前提是qq已经开通smtp服务

simpleEmail.setHostName("smtp.163.com");

//防止中文乱码

simpleEmail.setCharset("utf-8");

try {

// 收件人信箱合和收件人别名

simpleEmail.addTo("[email protected]", "颜色不一样的烟火");

// 发件人信箱和密码

simpleEmail.setAuthentication("[email protected]",

"xxx");

// 发件人信箱和别名 这个邮箱的要与设置使用邮件服务器相对应,意思是不能用qq的smtp发送网易的邮件

simpleEmail.setFrom("[email protected]", "网易邮箱");

simpleEmail.setSubject("subject");

simpleEmail.setMsg("hello world! 你好,世界!");

simpleEmail.send();

} catch (EmailException e) {

// TODO Auto-generated catch block

System.out.println("发送失败");

e.printStackTrace();

}

System.out.println("发送成功");

}

}

b、发送邮件带附件

public class TestCommonEmail {

public static void main(String[] args) {

MultiPartEmail simpleEmail = new MultiPartEmail();

// 设置使用发送邮件的邮件服务器

simpleEmail.setHostName("smtp.163.com");

simpleEmail.setCharset("utf-8");

try {

// 收件人信箱合和收件人别名

simpleEmail.addTo("[email protected]", "颜色不一样的烟火");

// 发件人信箱和密码

simpleEmail.setAuthentication("[email protected]",

"xxx");

// 发件人信箱和别名 这个邮箱的要与设置使用邮件服务器相对应

simpleEmail.setFrom("[email protected]", "网易邮箱");

simpleEmail.setSubject("subject");

simpleEmail.setMsg("hello world! 你好,世界!");

EmailAttachment emailAttachment = new EmailAttachment();

//附件放在项目的根目录下

emailAttachment.setPath("naaomei.jpeg");

simpleEmail.attach(emailAttachment);

simpleEmail.send();

} catch (EmailException e) {

// TODO Auto-generated catch block

System.out.println("发送失败");

e.printStackTrace();

}

System.out.println("发送成功");

}

}

c、对发送邮件的方法进行封装优化所有的发件人信息和email_host放在配置文件中

config.properties

email_host=smtp.163.com

[email protected]

email_password=xxx

读取配置文件中属性的类PropertiesUtil.java

public class PropertiesUtil {

private static InputStream inputStream = null;

public static String readStringValue(String propertyName) throws Exception {

String _propertyName = "";

// classloader默认加载的就是以classpath开始的绝对路径不能加"/",否则找不到文件

inputStream = PropertiesUtil.class.getClassLoader()

.getResourceAsStream("config.properties");

System.out.println(inputStream.available());

Properties p = new Properties();

System.out.println("p:" + p);

try {

p.load(inputStream);

} catch (IOException e1) {

inputStream.close();

}

_propertyName = p.get(propertyName).toString();

inputStream.close();

return _propertyName;

}

发送各种邮件EmailUtil.java

public class EmailUtil {

public static void sendmail(String to, String subject, String msg)

throws Exception {

HtmlEmail email = new HtmlEmail();

email.setHostName(PropertiesUtil.readStringValue("email_host"));

email.setCharset("utf-8");

email.addTo(to);

email.setFrom(PropertiesUtil.readStringValue("email_from"));

email.setAuthentication(PropertiesUtil.readStringValue("email_from"),

PropertiesUtil.readStringValue("email_password"));

email.setSubject(subject);

email.setHtmlMsg(msg);

email.send();

}

public static void sendmailWithAttachment(String to, String subject,

String msg, EmailAttachment[] attachs) throws Exception {

HtmlEmail email = new HtmlEmail();

email.setHostName(PropertiesUtil.readStringValue("email_host"));

email.setCharset("utf-8");

email.addTo(to);

email.setFrom(PropertiesUtil.readStringValue("email_from"));

email.setAuthentication(PropertiesUtil.readStringValue("email_from"),

PropertiesUtil.readStringValue("email_password"));

email.setSubject(subject);

email.setHtmlMsg(msg);

for (int i = 0; i < attachs.length; i++) {

email.attach(attachs[i]);

}

email.send();

}

public static void sendMultiPartMail(String to, String subject, String msg,

String fileName) throws Exception {

// 创建附件邮件对象

MultiPartEmail multipartMail = new MultiPartEmail();

multipartMail.setCharset("utf-8");

multipartMail.setHostName(PropertiesUtil.readStringValue("email_host"));

// 创建一个附件(附件可以是一个本地路径也可以是一个网络url)

EmailAttachment emailAttachment = new EmailAttachment();

emailAttachment.setPath(fileName);

emailAttachment.setDescription(EmailAttachment.ATTACHMENT);

emailAttachment.setDescription("This is a attach test!");

try {

System.out.println("email_from======="

+ PropertiesUtil.readStringValue("email_from"));

multipartMail.setFrom(PropertiesUtil.readStringValue("email_from"));

multipartMail.setAuthentication(

PropertiesUtil.readStringValue("email_from"),

PropertiesUtil.readStringValue("email_password"));

multipartMail.addTo(to);

// multipartMail.addCc("");

multipartMail.setSubject(subject);

multipartMail.setMsg(msg);

multipartMail.attach(emailAttachment);

// 添加附件

// multipartMail.attach(emailAttachment);

// multipartMail.attach(emailAttachment);

// multipartMail.attach(emailAttachment);

// multipartMail.attach(emailAttachment);

// 发送

multipartMail.send();

} catch (Exception e) {

// TODO Auto-generated catch

e.printStackTrace();

}

}

public static void main(String[] args) throws Exception {

System.out.println("发送邮件开始");

EmailUtil.sendmail("[email protected]", "hello", "nice to meet you!");

// EmailUtil.sendMultiPartMail("[email protected]", "nihaodjfajs",

// "111sdfgsdfgsdfgsd","D:/text.pdf");

// EmailAttachment[] emailAttachments = new EmailAttachment[2];

// EmailAttachment emailAttachment = new EmailAttachment();

// emailAttachment.setPath("D:/text1.pdf");

// emailAttachments[0] = emailAttachment;

// EmailAttachment agreement = new EmailAttachment();

// agreement.setPath("D:/text.pdf");

/*

* agreement.setDisposition(EmailAttachment.ATTACHMENT);

* agreement.setDescription("订房业务合作协议(上海多途国旅)");

* agreement.setName(MimeUtility.encodeText("订房业务合作协议(上海多途国旅).doc"));

*/

// emailAttachments[1] = agreement;

// EmailUtil.sendmailWithAttachment("[email protected]",

// "newnewnihaodjfajs", "111sdfgsdfgsdfgsd", emailAttachments);

System.out.println("success");

}

}

时间: 2024-11-12 21:37:40

java中利用commons-email-1.2.jar实现简单的发邮件的相关文章

java中利用反射机制绕开编译器对泛型的类型限制

首先看下面这个例子 public static void main(String[] args) { ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(1); ArrayList<String> al2 = new ArrayList<String>(); al2.add("hello"); //int型链表和string型链表,结果为true System.out.pr

Java中利用Optional处理字符串转数字问题

最近在利用JavaFx开发时,由于没有只能输入数字的控件,每次都要对用户输入的string进行转换,但是Java中利用Double.parseDouble()方法转换时如果转化失败就会抛出异常,每次都try,catch很繁琐,而我在业余学习Swift时发现Swift的Optional和 as?的配合就可以极其优雅的解决这个问题,转换成功则获得该值,失败则为nil(Java里的null),而Java8也引入了Optional类,于是自己试着封装了一下,代码如下: public class Stri

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具: c代表生成新的jar包: e代表可执行的类,亦即main方法所在的类.如果该类有所属的包,书

Java中利用MessageFormat对象实现类似C# string.Format方法格式化

我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使得代码更为直观清楚. 最近使用java时候却java的string.Format与c#重点string.Format用法不一样,java中的string.format更类似于C语言的sprintf()方法 例如: String str=null; str=String.format("Hello,%

在JAVA中利用public static final的组合方式对常量进行标识

在JAVA中利用public static final的组合方式对常量进行标识(固定格式). 对于在构造方法中利用final进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效. 常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值.Final int x=3: ②在构造的时候赋值. 局部变量可以随时赋值. 1 package TomText; 2 //利用if语句,判断某一年是否是闰年. 3 public class TomText_28 { 4 p

TreeMap和TreeSet即Java中利用二叉搜索树实现的Map和Set

一:概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树. 二:操作--查找先和根节点做对比,相等返回,如果不相等,关键码key>根节点key,在右子树中找(root=root.rightChild)关键码key<根节点key,在左子树中找(root=root.leftChild)否则返回false 三:操作--插入根据二

Java中的try、catch、finally块简单的解析

package com.wangzhu; import java.util.HashMap; import java.util.Map; /** * 在try.catch.finally块中,若try中有return语句,则返回try中变量的值,<br/> * 不管try块外是否对该变量进行了修改, 都不影响try中return的返回值.<br/> * 若finally中有return语句,则忽略try.catch块中的return语句.<br/> * 若finally

Java中利用synchronized关键字实现多线程同步问题

Java 中多线程的同步依靠的是对象锁机制,synchronized关键字就是利用了封装对象锁来实现对共享资源的互斥访问. 下面以一个简单例子来说明多线程同步问题,我们希望在run()方法里加入synchronized关键字来实现互斥访问. package com.clark.thread; public class MyThread implements Runnable{     private int threadId;          public MyThread(int id){

java中利用RandomAccessFile读取超大文件

超大文件我们使用普通的文件读取方式都很慢很卡,在java中为我提供了RandomAccessFile函数,可以快速的读取超大文件并且不会感觉到卡哦,下面看我的一个演示实例. 服务器的日志文件往往达到400多M,简单的文件读取实在太慢,太占用机器资源. 特别是如果你需要5分钟就扫描一次日志文件,来统计一些即时数据.比如刚才10分钟的来访客户(大型网站用户统计系统例如51.la 会经常用到吧.)即时扫描大数据文件中的一部分显得非常之重要.本文讲述了如果使用java的RandomAccessFile方