发送邮件的主要步骤

1.设置发送的协议,也就是设置smtp和验证机制(一般协议都是通过Properties键值形式来设置)

2.发送邮件需要的几个重要类Session ,Message,Transport

3.Session对象可以通过Session的getInstance(java.util.Properties props)

或getInstance(java.util.Properties props, Authenticator authenticator)  Authenticator 可以理解为密码和用户名的验证器

或getDefaultInstance(java.util.Properties props)

或getDefaultInstance(java.util.Properties props, Authenticator authenticator)

4.邮件的一些重要内容都是通过Message设置,比例内容,主题,接收人..

接收人可以通过Message的setRecipients(Message.RecipientType type,Address address)

Message.RecipientType 有三个重要属性 1.BCC(密送),2.CC(抄送) ,3.TO(收件人)

5.可以通过Transport.send(Message msg)发送邮件

一般发送简单的邮件上面几个步骤就可以实现了,但是要发送一封复杂的邮件(有附件和文本,图片)还需要以下步骤

A.发送复杂邮件需要这个两个重要类MimeBodyPart 和 MimeMultipart

先要搞清楚文本和图片的关系是related,而文本和图片再加上附件的关系就是mixed

B.文本用一个MimeBodyPart对象保存

C.图片也是用一个MimeBodyPart对象保存

D.用一个MimeMultipart A对象来保存,保存文本的MimeBodyPart对象和保存图片的MimeBodyPart对象

这个MimeMultipart对象 通过构造函数 new MimeMultipart("related")获取

E.附件也是用一个MimeBodyPart C对象保存

F.用一个总MimeBodyPart B对象来保存MimeMultipart A对象

G.还得用一个总的MimeMultipart all对象来保存MimeBodyPart C对象和MimeBodyPart B对象

这个all对象通过构造函数 new MimeMultipart("mixed")获取

H.最后用Message.setContent(Multipart mp)方法保存总的邮件

I.可以通过Transport.send(Message msg)发送邮件

现在发送一份简单的邮件,邮件内容只含有一些文字

Code:

package com.michael.email;

import java.util.Properties;

import javax.mail.Address;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

// @author Michael.Wu

//JavaMail 发送邮件

public class JavaEmail {

public static void main(String[] args) throws AddressException, MessagingException {

Properties properties = new Properties();

properties.setProperty("mail.transport.protocol", "smtp");//发送邮件协议

properties.setProperty("mail.smtp.auth", "true");//需要验证

// properties.setProperty("mail.debug", "true");//设置debug模式 后台输出邮件发送的过程

Session session = Session.getInstance(properties);

session.setDebug(true);//debug模式

//邮件信息

Message messgae = new MimeMessage(session);

messgae.setFrom(new InternetAddress("whyao@sina.cn"));//设置发送人

messgae.setText("what's up man");//设置邮件内容

messgae.setSubject("哥们该吃饭了");//设置邮件主题

//发送邮件

Transport tran = session.getTransport();

// tran.connect("smtp.sohu.com", 25, "wuhuiyao@sohu.com", "xxxx");//连接到新浪邮箱服务器

tran.connect("smtp.sina.com", 25, "whyao@sina.cn", "xxxxxxx");//连接到新浪邮箱服务器

// tran.connect("smtp.qq.com", 25, "Michael8@qq.vip.com", "xxxx");//连接到QQ邮箱服务器

tran.sendMessage(messgae, new Address[]{ new InternetAddress("Michael8@qq.vip.com")});//设置邮件接收人

tran.close();

}

}

====================================================================================

把邮件的用户名和密码改为你们自己的,就可以发送邮件了。有一个地方得注意,设置发送人和和你当前       发送邮件用的账号要相同,不然会报异常或会收不到邮件。以前发送人和发送邮件的账号是可以不同的现       在就不行,可能是邮箱服务商不允许的原因吧。

接下来发送一份复杂的邮件(含有附件和图片,文本)

Code:

package com.michael.email;

import java.io.File;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.Message.RecipientType;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

//@author Michael.wu

// 发送复杂的邮件(文本内容,附件,图片)

public class JavaEmail3 {

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

//发送邮件的协议

Properties properties = new Properties();

properties.setProperty("mail.smtp.auth","true");//设置验证机制

properties.setProperty("mail.transport.protocol","smtp");//发送邮件协议

properties.setProperty("mail.smtp.host","smtp.sina.com");//设置邮箱服务器地址

properties.setProperty("mail.smtp.port","25");

Session session = Session.getInstance(properties,new MyAuthenticator());

session.setDebug(true);

Message message = new MimeMessage(session);

message.setFrom(new InternetAddress("whyao@sina.cn"));

message.setSubject("一封复杂的邮件");

message.setRecipients(RecipientType.TO,InternetAddress.parse("michael8@vip.qq.com"));//接收人

message.setRecipients(RecipientType.CC,InternetAddress.parse("1348800595@qq.com"));//抄送人

message.setRecipients(RecipientType.BCC,InternetAddress.parse("1348800595@qq.com"));//密送人

MimeBodyPart bodyPartAttch = createAttachMent("C:\\Users\\Administrator\\Desktop\\mail.jar");//附件

MimeBodyPart bodyPartContentAndPic = createContentAndPic("I just want to Fuck","C:\\Users\\Administrator\\Desktop\\0.jpg");//文本内容

MimeMultipart mimeMuti = new MimeMultipart("mixed");

mimeMuti.addBodyPart(bodyPartAttch);

mimeMuti.addBodyPart(bodyPartContentAndPic);

message.setContent(mimeMuti);

message.saveChanges();

//message.setContent("Michael", "text/html;charset=gbk");

Transport.send(message);

}

//创建附件

public static MimeBodyPart createAttachMent(String path) throws MessagingException{

MimeBodyPart mimeBodyPart = new MimeBodyPart();

FileDataSource dataSource = new FileDataSource( new File(path));

mimeBodyPart.setDataHandler(new DataHandler(dataSource));

mimeBodyPart.setFileName(dataSource.getName());

return mimeBodyPart;

}

//创建文本和图片

public static MimeBodyPart createContentAndPic(String content,String path) throws MessagingException{

MimeMultipart mimeMutiPart = new MimeMultipart("related");

//图片

MimeBodyPart picBodyPart = new MimeBodyPart();

FileDataSource fileDataSource = new FileDataSource( new File(path));

picBodyPart.setDataHandler(new DataHandler(fileDataSource));

picBodyPart.setFileName(fileDataSource.getName());

mimeMutiPart.addBodyPart(picBodyPart);

//文本

MimeBodyPart contentBodyPart = new MimeBodyPart();

contentBodyPart.setContent(content,"text/html;charset=gbk");

mimeMutiPart.addBodyPart(contentBodyPart);

//图片和文本结合

MimeBodyPart allBodyPart = new MimeBodyPart();

allBodyPart.setContent(mimeMutiPart);

return allBodyPart;

}

}

Code:

package com.michael.email;

import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;

public class MyAuthenticator extends Authenticator {

private static final String userName = "whyao@sina.cn";

private static final String passWord = "xxxxxxx";

// * @author Michael.wu

//* 密码和用户的验证

public MyAuthenticator() {

super();

}

@Override

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(userName, passWord);

}

}

//注意上面通过Main方法发送出去的邮件,图片会以附件的形式显示。如果你想把图片当做背景图或者是想在文本中插一张图片,还要把上面的createContentAndPic方法改改。

code:

//创建文本和图片

public static MimeBodyPart createContentAndPic(String content,String path) throws MessagingException, UnsupportedEncodingException{

MimeMultipart mimeMutiPart = new MimeMultipart("related");

//图片

MimeBodyPart picBodyPart = new MimeBodyPart();

FileDataSource fileDataSource = new FileDataSource( new File(path));

picBodyPart.setDataHandler(new DataHandler(fileDataSource));

picBodyPart.setFileName(MimeUtility.encodeText("米克个人照"));//解决中文乱码问题

picBodyPart.setHeader("Content-Location", "http://www.michael.com/mike.jpg");

//http://www.michael.com/mike.jpg这个路径是后面文本图片的路径

//文本

MimeBodyPart contentBodyPart = new MimeBodyPart();

//img的src要和setHeader中设置的值一样

contentBodyPart.setContent(content+"","text/html;charset=gbk");

mimeMutiPart.addBodyPart(contentBodyPart);

mimeMutiPart.addBodyPart(picBodyPart);

//图片和文本结合

MimeBodyPart allBodyPart = new MimeBodyPart();

allBodyPart.setContent(mimeMutiPart);

return allBodyPart;

}

//通过上面的程序发送出的邮件,在Foxmail中打开,图片会在文本中正常显示。而在QQ邮箱 新浪邮箱 打开这封邮件,图片会以附件的形式显示,在文本中显示不出来。这到底是什么原因,或是还要设置什么。我还没有弄明白。希望看到这篇博客的网友,知道是什么原因的,还得请你们也告诉我一声,谢谢。

java jmail_java jmail相关推荐

  1. java jmail_Java jmail邮件发送与不重复随机码 | 彬菌

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 发送邮件 MailUtil.java import java.util.Date; import java.uti ...

  2. java使用JMail通过QQ邮件服务器实现自动发送邮件

    前言:项目开发的过程中,我们项目需要一个自动发送邮件提醒的小功能,于是简单的研究了一下java的JMail来实现自动发送邮件的功能.已被后期需要参考. 一.准备 实现的原理很简单:发送人 , 中转的邮 ...

  3. java之jmail实现邮件发送

    闲着没事写个用jmail发送邮件的功能 1.所需jar包 <!-- https://mvnrepository.com/artifact/javax.mail/mail --> <d ...

  4. 利用jmail qq邮箱发邮件 报错 解决方法

    利用java的jmail,登录qq邮箱发邮件时遇到下面几个问题,分享一下解决方法. 1. qq需要使用ssl  解决方法:使用有ssl安全认证的代码 <span style="font ...

  5. SqlServer邮件

    邮件的功能已经被更为广泛的行政用户所接受.目前,处理邮件的手段很多,如基于JAVA的Jmail或者.NET下也提供了解决方案.而基于当前企业所能拿到的资源,我采用JOB+存储过程的方式实现HTML邮件 ...

  6. JMail 应用实践(一)--- 简介用Java程序发送email

    用JavaMail 发送电子邮件虽然很简单,但是对于未接触过的朋友,它还存在着一丝神秘.本文通过用一个简单的Java 应用程序发送一封电子邮件来揭开这片神秘的面纱,而对于邮件协议等等内容,这里暂不涉及 ...

  7. java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能

    jsp 和 javaBean 实现计算器功能 try { calculator.calculate(); } catch (Exception e) { out.write(e.getMessage( ...

  8. jmail组件 java_Jmail的主要参数列表

    说明:更多的信息请参考Jmail说明,我想这已经足够用的了.(1)Body(信件正文):字符串网络 说明:更多的信息请参考Jmail说明,我想这已经足够用的了. (1)Body(信件正文) : 字符串 ...

  9. 手把手教你用java发送邮件

    手把手教你用java发送邮件 一.学习目的 1.学会用jmail发送邮件 2.学会自动发送邮件需要的一些设置 二.准备内容(以163邮箱示范) 1.个人邮箱 首先登录163个人邮箱,然后在个人页面-设 ...

最新文章

  1. 从0开始搭建坚不可摧的Web系统主流架构
  2. 网络爬虫--SAX处理xml
  3. go gorm 密码隐藏_掀开华为云的Go语言编程底座!有深度、有点难、需细品(上)...
  4. 原型模式codeing
  5. 相对路径 ‘’,‘/’,‘./‘,‘../‘
  6. Fescar TC-beigin流程
  7. oracle12漏洞补丁下载,linux oracle 11g 漏洞补丁升级
  8. 前端薪资竟最差?程序员跳槽时如何才能谈个好价钱
  9. 三、地址族与数据序列
  10. 透明flash代码_Animate/FLASH如何制作纵深前进的动画
  11. VB MsgBox 函数 了解一下
  12. nginx-http重定向到https配置
  13. EasyPoiUtil纯代码生成excel进行下载
  14. Linux部署docker容器(使用root用户登录)
  15. LM5161QPWPTQ1
  16. scala中下划线的几种含义
  17. 神兽传说1 java_神兽传说RPG
  18. MySQL5.7 连接不上的解决办法(本地无法登录)
  19. 【软件定义汽车】【其他篇】ASPICE--V模型软件开发
  20. 相控阵雷达的探讨分析

热门文章

  1. 好文转载—程序员在工作中会追求什么?
  2. AutoCAD .NET API二次开发学习指南
  3. 【OpenCV】8邻域种子填充法剔除短连通域的高效算法
  4. 如何在O(1)的时间里删除单链表的结点
  5. 使用OpenCV调用Caffe-SSD训练好的模型
  6. Oracle起步——Oracle 11g安装配置
  7. Windows下创建静态库
  8. 关于SpringCloud配置中心,ConfigClient需要注意的问题
  9. Kotlin 普及度增加,代码质量比 Java 更高?
  10. 功能式Python中的探索性数据分析