Java程序发送邮件

之前上网有看到过别人总结的使用java程序发送邮件,于是自己下来练习,把自己学习的一些心得总结出来.

首先我们这里需要采用两个jar包:

需要的朋友可以自行上网去CSDN类似的网站上面找

顺便把自己测试用例贴了出来,里面有些详细的注释,接下来会提醒写demo的时候大家一些注意的地方.把中间有自己遇到的问题.贴出来供大家参考.

1.首先确保发送人的邮箱  跟  接收人的邮箱  的smtp协议开着.   ------》可以上邮箱设置里面打开.

这里使用的QQ邮箱   我们可以在邮箱帮助中找到QQ邮箱的pop3跟smtp服务器地址已经开放的相应端口 一般是465,或者是587

2.极其重要一点:现在很多邮箱都采用授权码的方式对第三方开放 pop3跟smtp服务   ,所以我们在用邮箱账户密码登录邮箱时,记得要把密码换成相应的  授权码.

(需要我们手机去发短信验证的)

3.我们测试发送的邮件内容有可能被邮件服务器当成是垃圾邮件拦截掉,这里我们需要设置下.将其加入到邮件的白名单中,可避开反垃圾误判

4.针对发送失败的错误,我们可以仔细分析出错的code码,上网查找对应的错误码信息,找到错误的原因.

这里针对发送邮箱是网易来说:

http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

测试demo如下:

package Test;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Testmail {
    // 发送邮件的账号
    public static String ownEmailAccount = "[email protected]";
    // 发送邮件的密码------》授权码
    public static String ownEmailPassword = "xxxxxxxxxxx";
    // 发送邮件的smtp 服务器 地址
    public static String myEmailSMTPHost = "smtp.163.com";
    // 发送邮件对方的邮箱
    public static String receiveMailAccount = "[email protected]";

public static void main(String[] args) throws Exception {
        Properties prop = new Properties();
        // 设置邮件传输采用的协议smtp
        prop.setProperty("mail.transport.protocol", "smtp");
        // 设置发送人邮件服务器的smtp地址
        // 这里以网易的邮箱smtp服务器地址为例
        prop.setProperty("mail.smtp.host", myEmailSMTPHost);
        // 设置验证机制
        prop.setProperty("mail.smtp.auth", "true");

// SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
        // 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
        // QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)

/*final String smtpPort = "465";
        prop.setProperty("mail.smtp.port", smtpPort);
        prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        prop.setProperty("mail.smtp.socketFactory.fallback", "false");
        prop.setProperty("mail.smtp.socketFactory.port", smtpPort);*/

// 创建对象回话跟服务器交互
        Session session = Session.getInstance(prop);
        // 会话采用debug模式
        session.setDebug(true);
        // 创建邮件对象
        Message message = createSimpleMail(session);

Transport trans = session.getTransport();
        // 链接邮件服务器
        trans.connect(ownEmailAccount, ownEmailPassword);
        // 发送信息
        trans.sendMessage(message, message.getAllRecipients());
        // 关闭链接
        trans.close();
    }

/**  
    * @Title: createSimpleMail  
    * @Description: 创建邮件对象
    * @author: chengpeng
    * @param @param session
    * @param @return
    * @param @throws Exception    设定文件  
    * @return Message    返回类型  
    * @throws  
    */
    public static Message createSimpleMail(Session session) throws Exception {
        MimeMessage message = new MimeMessage(session);
        // 设置发送邮件地址,param1 代表发送地址 param2 代表发送的名称(任意的) param3 代表名称编码方式
        message.setFrom(new InternetAddress("[email protected]", "张三", "utf-8"));
        // 代表收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveMailAccount, "李四", "utf-8"));
        // To: 增加收件人(可选)
        /*message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("[email protected]", "USER_DD", "UTF-8"));
        // Cc: 抄送(可选)
        message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("[email protected]", "USER_EE", "UTF-8"));
        // Bcc: 密送(可选)
        message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("[email protected]", "USER_FF", "UTF-8"));*/
        // 设置邮件主题
        message.setSubject("测试转发邮件");
        // 设置邮件内容
        message.setContent("早安,世界   你最近好吗!", "text/html;charset=utf-8");
        // 设置发送时间
        message.setSentDate(new Date());
        // 保存上面的编辑内容
        message.saveChanges();
        // 将上面创建的对象写入本地
        OutputStream out = new FileOutputStream("MyEmail.eml");
        message.writeTo(out);
        out.flush();
        out.close();
        return message;

}

}

参考链接:http://blog.csdn.net/xietansheng/article/details/51673073

时间: 2024-12-25 17:27:10

Java程序发送邮件的相关文章

用java程序发送邮件

发送没有附件的邮箱: public void test2() throws Exception{ //1:声明服务器地址 Properties p = new Properties(); p.setProperty("mail.host","smtp.sohu.com");//指定服务器,以搜狐邮箱为例 p.setProperty("mail.smtp.auth","true");//进行验证 Authenticator au

Java程序片段

下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 ? 1 2 String a = String.valueOf(2);   //integer to numeric string  int i = Integer.parseInt(a); //numeric string to an int 2. 向文件末尾添加内容 ? 1 2 3 4 5 6 7 8 9 10 11 BufferedWriter out = null;  try {      out =

20个非常有用的Java程序片段--转

原文地址:http://geek.csdn.net/news/detail/236591 下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric string int i = Integer.parseInt(a); //numeric string to an int 2. 向文件末尾添加内容 BufferedWriter out = null; try { o

java实现发送邮件工具

java实现发送邮件的功能:首先需要导入mail.jar: 然后需要写发送方法: 1.邮箱发送封装工具类: package com.wxjiameng.utils; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Address; import java

使用Java程序发送Email

    目前很多大型的网站忘记登录密码常见的一种形式是使用邮箱找回密码  最近做项目也有这个需求  现在总结一下  以便以后查看 使用到的包有 mailapi.jar smtp.jar   封装发送邮件的实体 package com.tes; import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mai

如何把我的Java程序变成exe文件?

JAVA是一种“跨平台”的语言,拥有“一次编写,处处运行”的特点,让它成为当今IT行业,必不可少的一门编程语言.每一个软件开发完成之后,应该大家都需要打包程序并发送给客户,常见的方式:java程序打成jar包,web程序打成war包 完成之后再通过某种传输方式,传输给客户让其运行.war包 我们这里不做过多阐述,主要说说jar包的问题,jar包必须需要运行在jre环境中,并且需要通过“java -jar 路径/*.jar”的指令才可以完成运行,很多客户并不知道这个命令,这对于他来说确实有些困难,

001.我的第一个Java程序

第一步安装JDK 第二步设置PATH路径 设置Windows的PATH 路径 方法一:直接设置添加PATH C:\Program Files\Java\jdk1.8.0_92\bin 方法二: 先增加一个系统变量为JDK安装目录的BIN文件夹 %JAVAHOME%\BIN 访问JAVAHOME路径的bin文件夹 设置classpath用于不同的目录运行Java程序能找到主类 classpath=.;e:\java 1 class MyFirstJava{ 2 public static void

Java程序猿学习当中各个阶段的建议

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的. 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了. 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个

Java程序员应该了解的10个面向对象设计原则

面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这样的设计模式,而不重视面向对象的分析和设计.甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程. 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计.查看Ap