之前上网有看到过别人总结的使用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 = "xxxxxxxxxx@163.com";
    // 发送邮件的密码------》授权码
    public static String ownEmailPassword = "xxxxxxxxxxx";
    // 发送邮件的smtp 服务器 地址
    public static String myEmailSMTPHost = "smtp.163.com";
    // 发送邮件对方的邮箱
    public static String receiveMailAccount = "xxxxxxxxxx@qq.com";

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("xxxxxxxxx@163.com", "张三", "utf-8"));
        // 代表收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveMailAccount, "李四", "utf-8"));
        // To: 增加收件人(可选)
        /*message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));
        // Cc: 抄送(可选)
        message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
        // Bcc: 密送(可选)
        message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "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

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

  1. 20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

  2. Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 ? 1 2 String a = String.valueOf(2);   //integer to numer ...

  3. 整理:20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

  4. java实现发送邮件工具

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

  5. 收集的20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

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

    原文地址:http://geek.csdn.net/news/detail/236591 下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = ...

  7. Java实现发送邮件,图片,附件

    参照地址 1.JavaMail 介绍 JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面 ...

  8. 千万小心,99%的Java程序员会踩这些坑

    前言 作为Java程序员的你,不知道有没有踩过一些基础知识的坑. 有时候,某个bug查了半天,最后发现竟然是一个低级错误. 有时候,某些代码,这一批数据功能正常,但换了一批数据就出现异常了. 有时候, ...

  9. [转载]一个标准java程序员的进阶过程

    第一阶段:Java程序员 技术名称 内                 容 说明 Java语法基础 基本语法.数组.类.继承.多态.抽象类.接口.object对象.常用类(Math\Arrarys\S ...

随机推荐

  1. ElasticSearch 集群健康

    1.介绍 一个 Elasticsearch 集群至少包括一个节点和一个索引.或者它 可能有一百个数据节点.三个单独的主节点,以及一小打客户端节点——这些共同操作一千个索引(以及上万个分片). 不管集群 ...

  2. DevExpress控件之GridControl、GridView

    GridControl对应标准WinForm里的GridView,相当于是一个控件,里面包含多个GridView也可以放其它的控件 禁止修改gridView1.OptionsBehavior.Edit ...

  3. linux获取后台进程的控制台数据

    linux提供了一个daemon函数,使得进程能够脱离控制台执行,实现了后台执行的效果.可是进程后台执行后,原本在终端控制台输出的数据就看不到了. 那么,如何才干找回这些数据? 这里.文章主题就环绕着 ...

  4. Assets 读取assets中的文件

    res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. res/raw和assets的不同点:1.res/raw中的文件会被映射到R.j ...

  5. ionic准备之angular基础——dom操作相关(6)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. MySQL几个性能指标

    近期参加了一个DBA MySQL的分享,主要从MySQL的性能指标分析.同步及运维三个方面分享一些经验,其中,一些经验值还是值得记录下来的: 对于一个MySQL实例,CRUD上限经验值如下: Quer ...

  7. C#趣味程序---水仙花数

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. 初探J2EE

    还记得在技术交流会上八期给我们讲的J2EE,当时就是云里来屋里去.留在自己脑子中的仅仅有两个字"规范",其他的真是一无全部. 可是如今学了后,又在脑子里留下了两个字"规范 ...

  9. window.location网页URL信息

    window.location属性 描述 hash 设置或获取 href 属性中在井号“#”后面的分段. host 设置或获取 location 或 URL 的 hostname 和 port 号码. ...

  10. 用Android Studio 执行ndk 程序

    近期准备研究一下android双进程守护,因为此前用eclipse 写jni习惯了.如今主要用as 工具.在此也试着写个demo 然后在对双进程守护进行研究 1.所需工具 android studio ...