java mail 带图片附件

0 篇文章 0 订阅

package t;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class AttchAndImgMail {
// JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.163.com");// 设置smtp主机
properties.put("mail.smtp.auth", "true");// 使用smtp身份验证
/*
* 在 JavaMail 中,可以通过 extends Authenticator 抽象类,在子类中覆盖父类中的 getPasswordAuthentication()
* 方法,就可以实现以不同的方式来进行登录邮箱时的用户身份认证。JavaMail 中的这种设计是使用了策略模式(Strategy
*/
MimeMessage message = new MimeMessage(Session.getInstance(properties, new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx@163.com", "");
}
}));
// 设置邮件的属性
// 设置邮件的发件人
message.setFrom(new InternetAddress("XXX@163.com"));
// 设置邮件的收件人 cc表示抄送 bcc 表示暗送
message.setRecipient(Message.RecipientType.TO, new InternetAddress("xx@xx.com"));
// 设置邮件的主题
message.setSubject("世界上最复杂的邮件有附件和图片");
// 创建邮件的正文
MimeBodyPart text = new MimeBodyPart();
// setContent(“邮件的正文内容”,”设置邮件内容的编码方式”)
text.setContent("世界上最复杂的邮件<img src='cid:a'><img src='cid:b'>", "text/html;charset=gb2312");
// 创建图片
MimeBodyPart img = new MimeBodyPart();
/*
* JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.
* 除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的.
* JavaMail API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法.
*/
DataHandler dh = new DataHandler(new FileDataSource("\\ueditor\\image\\20140923\\1411452001148005322.gif"));
img.setDataHandler(dh);
// 创建图片的一个表示用于显示在邮件中显示
img.setContentID("a");


MimeBodyPart img1 = new MimeBodyPart();
DataHandler dh1 = new DataHandler(new FileDataSource("\\ueditor\\image\\20140923\\1411452012849098519.png"));
img1.setDataHandler(dh1);
// 创建图片的一个表示用于显示在邮件中显示
img1.setContentID("b");

// 创建附件
MimeBodyPart attch = new MimeBodyPart();
DataHandler dha = new DataHandler(new FileDataSource("\\mailattachment\\20140923140025!-resize_png_new.png"));
attch.setDataHandler(dha);
String filename1 = dha.getName();
// MimeUtility 是一个工具类,encodeText()用于处理附件字,防止中文乱码问题
attch.setFileName(MimeUtility.encodeText(filename1));
// 关系 正文和图片的
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(img);
mm.addBodyPart(img1);
mm.setSubType("related");// 设置正文与图片之间的关系
// 图班与正文的 body
MimeBodyPart all = new MimeBodyPart();
all.setContent(mm);


// 附件与正文(text 和 img)的关系
MimeMultipart mm2 = new MimeMultipart();
mm2.addBodyPart(all);
mm2.addBodyPart(attch);
mm2.setSubType("mixed");// 设置正文与附件之间的关系

message.setContent(mm2);
message.saveChanges(); // 保存修改
Transport.send(message);// 发送邮件

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Java Mail可以很方便地获取公司邮箱邮件附件。首先,我们需要确保Java Mail库已经引入到我们的项目。 接下来,我们可以通过以下代码来连接公司的邮箱服务器: ``` Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); props.setProperty("mail.imap.host", "公司邮箱服务器地址"); props.setProperty("mail.imap.port", "邮箱服务器端口号"); Session session = Session.getDefaultInstance(props); Store store = session.getStore("imap"); store.connect("公司邮箱用户名", "公司邮箱密码"); ``` 通过以上代码,我们建立了与公司邮箱服务器的连接。 接下来,我们可以通过以下代码来获取收件箱的邮件: ``` Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message[] messages = folder.getMessages(); for (Message message : messages) { // 获取邮件附件 Multipart multipart = (Multipart) message.getContent(); for (int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); if (Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())) { // 保存附件到本地文件系统 bodyPart.saveFile("本地保存路径"); } } } ``` 通过以上代码,我们遍历收件箱的所有邮件,并提取其的附件。我们可以将附件保存到本地文件系统,或者做其他进一步的处理。 最后,我们需要在使用完毕后,关闭与邮箱服务器的连接: ``` folder.close(false); store.close(); ``` 通过以上步骤,我们可以使用Java Mail轻松地获取公司邮箱邮件附件。注意,这只是一个简单示例,实际应用还需要处理异常情况、处理多封邮件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值