`

【转】Java Mail 邮件发送

 
阅读更多
发送邮件的主要步骤
  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)发送邮件
============================================================================================
现在发送一份简单的邮件,邮件内容只含有一些文字
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();
}
}
====================================================================================
把邮件的用户名和密码改为你们自己的,就可以发送邮件了。有一个地方得注意,设置发送人和和你当前       发送邮件用的账号要相同,不然会报异常或会收不到邮件。以前发送人和发送邮件的账号是可以不同的现       在就不行,可能是邮箱服务商不允许的原因吧。
接下来发送一份复杂的邮件(含有附件和图片,文本)
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;
}
}
 
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方法改改
//创建文本和图片
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+"<img src='http://www.michael.com/mike.jpg'></img>","text/html;charset=gbk");
mimeMutiPart.addBodyPart(contentBodyPart);
mimeMutiPart.addBodyPart(picBodyPart);
//图片和文本结合
MimeBodyPart allBodyPart = new MimeBodyPart();
allBodyPart.setContent(mimeMutiPart);
return allBodyPart;
}

//通过上面的程序发送出的邮件,在Foxmail中打开,图片会在文本中正常显示。而在QQ邮箱 新浪邮箱 打开这封邮件,图片会以附件的形式显示,在文本中显示不出来

http://blog.sina.com.cn/s/blog_68f4b9f20101boh3.html

 

分享到:
评论

相关推荐

    Java Mail邮件发送源码下载

    Java Mail邮件发送是Java开发中常见的一项功能,用于在应用程序中发送电子邮件。Java Mail API提供了一个标准的接口,使得开发者可以方便地实现SMTP(简单邮件传输协议)和其他邮件协议的功能。下面将详细介绍Java ...

    java mail 邮件发送

    Java Mail邮件发送是一个在Java应用程序中发送电子邮件的关键技术。它基于JavaMail API,这是一个开源库,提供了丰富的功能来处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等邮件...

    java实现邮件发送(三种发送方式都有)

    邮件发送主要涉及到SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol version 3)两种协议。SMTP用于将邮件发送到邮件服务器,而POP3则用于从邮件服务器接收邮件。此外,还有IMAP(Internet ...

    简单Java邮件发送 Java实现邮件发送

    Java邮件发送是一个常见的任务,尤其在自动化通知、订阅服务或者数据报告等场景中。本教程将详细介绍如何使用Java实现邮件发送功能,同时提供了一个Jar包和demo源码供参考。 首先,我们需要理解JavaMail API,这是...

    基于Java的邮件发送模板

    本篇文章将详细讲解如何利用Java实现邮件发送,并结合Apache的相关库来创建邮件发送模板,以提升效率和用户体验。 首先,JavaMail API是Java中用于处理电子邮件的主要库。它提供了丰富的API,可以用来创建、发送和...

    java 发送附件mail

    在实际开发中,还可以使用第三方库如Apache Commons Email或JavaMailSender Interface(Spring框架的一部分)来简化邮件发送的过程,它们提供了更友好的API来处理邮件。 总结一下,Java发送带有附件的邮件涉及到...

    Java邮件发送.zip

    Java邮件发送是一个常见的任务,尤其在自动化通知、用户...这个压缩包"Java邮件发送.zip"可能包含了实现以上功能的示例代码,供你参考和学习。通过理解和实践这些知识点,你可以熟练掌握在Java环境中发送邮件的方法。

    java mail 发送邮件

    下面将详细介绍如何使用Java Mail进行邮件发送,并结合提供的文件名称,提供相关的代码实例。 首先,要使用Java Mail API,我们需要引入相关的依赖库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml ...

    java mail(邮件发送实例)

    通过运行这个程序,你可以实际测试邮件发送功能是否正常工作。 总的来说,Java Mail API 提供了一套强大的工具,使得在Java应用程序中集成邮件功能变得简单。通过结合Apache Commons Email库,我们可以轻松地创建...

    java 发送邮件 spring发送邮件Mail

    接下来,我们可以创建一个服务类来处理邮件发送的具体逻辑,使用`JavaMailSender`发送邮件: ```java @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void ...

    java Mail 发送邮件及邮件附件

    Java Mail 提供了一个调试开关,允许开发者输出邮件发送过程的调试信息。下面是一个简单的示例代码: ```java public class Mail { public static void main(String[] args) { Mail mail = new Mail(); mail....

    java发送邮件相关jar包

    这里提到的两个jar包——`spring-context-support-4.1.7.RELEASE.jar`和`mail-1.4.1.jar`,都是Java邮件发送的重要组成部分。 `spring-context-support-4.1.7.RELEASE.jar`是Spring框架的一个扩展模块,主要提供了...

    java email邮件发送所需mail相关jar包

    "java email邮件发送所需mail相关jar包"就是这样一个集合,它包含了执行邮件发送所需的类和方法。 邮件发送主要依赖于JavaMail API,这是一个开源的Java库,它提供了与邮件服务器交互的标准API。JavaMail API包括多...

    java mail 发送QQ邮件

    System.out.println("邮件发送成功!"); } catch (MessagingException e) { e.printStackTrace(); } } } ``` 以上就是使用Java Mail API发送QQ邮件的完整流程。通过这个例子,你可以了解如何配置SMTP服务器,...

    java实现发送邮件功能源码+jar

    在Java中实现邮件发送,首先需要引入JavaMail API的相关依赖,如 javax.mail 和 javax.mail.internet 包。 2. **SMTP 协议**: Simple Mail Transfer Protocol (SMTP) 是互联网上用于发送电子邮件的标准协议。...

Global site tag (gtag.js) - Google Analytics