java发送邮件带多个附件

java 代码发邮件怎么添加附件

实现java发送邮件的过程大体有以下几步:

准备一个properties文件,该文件中存放SMTP服务器地址等参数。

利用properties创建一个Session对象

利用Session创建Message对象,然后设置邮件主题和正文

利用Transport对象发送邮件

需要的jar有2个:activation.jar和mail.jar发送附件,需要用到Multipart对象。

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.BodyPart;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

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 JavaMailWithAttachment {

    private MimeMessage message;

    private Session session;

    private Transport transport;

    private String mailHost = “”;

    private String sender_username = “”;

    private String sender_password = “”;

    private Properties properties = new Properties();

    /*

     * 初始化方法

     */

    public JavaMailWithAttachment(boolean debug) {

        InputStream in = JavaMailWithAttachment.class.getResourceAsStream(“MailServer.properties”);

        try {

            properties.load(in);

            this.mailHost = properties.getProperty(“mail.smtp.host”);

            this.sender_username = properties.getProperty(“mail.sender.username”);

            this.sender_password = properties.getProperty(“mail.sender.password”);

        } catch (IOException e) {

            e.printStackTrace();

        }

        session = Session.getInstance(properties);

        session.setDebug(debug);// 开启后有调试信息

        message = new MimeMessage(session);

    }

    /**

     * 发送邮件

     * 

     * @param subject

     *            邮件主题

     * @param sendHtml

     *            邮件内容

     * @param receiveUser

     *            收件人地址

     * @param attachment

     *            附件

     */

    public void doSendHtmlEmail(String subject, String sendHtml, String receiveUser, File attachment) {

        try {

            // 发件人

            InternetAddress from = new InternetAddress(sender_username);

            message.setFrom(from);

            // 收件人

            InternetAddress to = new InternetAddress(receiveUser);

            message.setRecipient(Message.RecipientType.TO, to);

            // 邮件主题

            message.setSubject(subject);

            // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件

            Multipart multipart = new MimeMultipart();

            

            // 添加邮件正文

            BodyPart contentPart = new MimeBodyPart();

            contentPart.setContent(sendHtml, “text/html;charset=UTF-8”);

            multipart.addBodyPart(contentPart);

            

            // 添加附件的内容

            if (attachment != null) {

                BodyPart attachmentBodyPart = new MimeBodyPart();

                DataSource source = new FileDataSource(attachment);

                attachmentBodyPart.setDataHandler(new DataHandler(source));

                

                // 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定

                // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码

                //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();

                //messageBodyPart.setFileName(“=?GBK?B?” + enc.encode(attachment.getName().getBytes()) + “?=”);

                

                //MimeUtility.encodeWord可以避免文件名乱码

                attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));

                multipart.addBodyPart(attachmentBodyPart);

            }

            

            // 将multipart对象放到message中

            message.setContent(multipart);

            // 保存邮件

            message.saveChanges();

            transport = session.getTransport(“smtp”);

            // smtp验证,就是你用来发邮件的邮箱用户名密码

            transport.connect(mailHost, sender_username, sender_password);

            // 发送

            transport.sendMessage(message, message.getAllRecipients());

            System.out.println(“send success!”);

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (transport != null) {

                try {

                    transport.close();

                } catch (MessagingException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    public static void main(String[] args) {

        JavaMailWithAttachment se = new JavaMailWithAttachment(true);

        File affix = new File(“c:\\测试-test.txt”);

        se.doSendHtmlEmail(“邮件主题”, “邮件内容”, “xxx@XXX.com”, affix);//

    }

}

怎么用java发送带附件的邮件代码详解

package email;  

import java.io.BufferedReader;   

import java.io.File;  

import java.io.FileInputStream;  

import java.io.FileNotFoundException;  

import java.io.IOException;  

import java.io.InputStream;  

import java.io.InputStreamReader;  

import java.io.PrintWriter;  

import java.io.UnsupportedEncodingException;  

import java.net.Socket;  

import java.nio.charset.Charset;  

import java.text.SimpleDateFormat;  

import java.util.ArrayList;  

import java.util.Date;  

import java.util.HashMap;  

import java.util.List;  

import java.util.Map;  

import sun.misc.BASE64Encoder;  

public class Mail {  

private static final String LINE_END = “\r\n”;  

private boolean isDebug = true;  

private boolean isAllowReadSocketInfo = true;  

private String host;  

private String from;  

private ListString to;  

private ListString cc;  

private ListString bcc;  

private String subject;  

private String user;  

private String password;  

private String contentType;  

private String boundary;  

private String boundaryNextPart;  

private String contentTransferEncoding;  

private String charset;  

private String contentDisposition;  

private String content;  

private String simpleDatePattern;  

private String defaultAttachmentContentType;  

private ListMailPart partSet;  

private static MapString, String contentTypeMap;  

static {  

// MIME Media Types  

contentTypeMap = new HashMapString, String();  

contentTypeMap.put(“xls”, “application/vnd.ms-excel”);  

contentTypeMap.put(“xlsx”, “application/vnd.ms-excel”);  

contentTypeMap.put(“xlsm”, “application/vnd.ms-excel”);  

contentTypeMap.put(“xlsb”, “application/vnd.ms-excel”);  

contentTypeMap.put(“doc”, “application/msword”);  

contentTypeMap.put(“dot”, “application/msword”);  

contentTypeMap.put(“docx”, “application/msword”);  

contentTypeMap.put(“docm”, “application/msword”);  

contentTypeMap.put(“dotm”, “application/msword”);  

}  

private class MailPart extends Mail {  

public MailPart() {  

}  

}  

public Mail() {  

defaultAttachmentContentType = “application/octet-stream”;  

simpleDatePattern = “yyyy-MM-dd HH:mm:ss”;  

boundary = “–=_NextPart_zlz_3907_” + System.currentTimeMillis();  

boundaryNextPart = “–” + boundary;  

contentTransferEncoding = “base64”;  

contentType = “multipart/alternative”;  

charset = Charset.defaultCharset().name();  

partSet = new ArrayListMailPart();  

to = new ArrayListString();  

cc = new ArrayListString();  

bcc = new ArrayListString();  

}  

private String getPartContentType(String fileName) {  

String ret = null;  

if (null != fileName) {  

int flag = fileName.lastIndexOf(“.”);  

if (0 = flag  flag  fileName.length() – 1) {  

fileName = fileName.substring(flag + 1);  

}  

ret = contentTypeMap.get(fileName);  

}  

if (null == ret) {  

ret = defaultAttachmentContentType;  

}  

return ret;  

}  

private String toBase64(String str, String charset) {  

if (null != str) {  

try {  

return toBase64(str.getBytes(charset));  

} catch (UnsupportedEncodingException e) {  

e.printStackTrace();  

}  

}  

return “”;  

}  

private String toBase64(byte[] bs) {  

return new BASE64Encoder().encode(bs);  

}  

private String toBase64(String str) {  

return toBase64(str, Charset.defaultCharset().name());  

}  

private String getAllParts() {  

int partCount = partSet.size();  

StringBuilder sbd = new StringBuilder(LINE_END);  

for (int i = partCount – 1; i = 0; i–) {  

Mail attachment = partSet.get(i);  

String attachmentContent = attachment.getContent();  

if (null != attachmentContent  0  attachmentContent.length()) {  

sbd.append(getBoundaryNextPart()).append(LINE_END);  

sbd.append(“Content-Type: “);  

sbd.append(attachment.getContentType());  

sbd.append(LINE_END);  

sbd.append(“Content-Transfer-Encoding: “);  

sbd.append(attachment.getContentTransferEncoding());  

sbd.append(LINE_END);  

if (i != partCount – 1) {  

sbd.append(“Content-Disposition: “);  

sbd.append(attachment.getContentDisposition());  

sbd.append(LINE_END);  

}  

sbd.append(LINE_END);  

sbd.append(attachment.getContent());  

sbd.append(LINE_END);  

}  

}  

sbd.append(LINE_END);  

sbd.append(LINE_END);  

partSet.clear();  

return sbd.toString();  

}  

private void addContent() {  

if (null != content) {  

MailPart part = new MailPart();  

part.setContent(toBase64(content));  

part.setContentType(“text/plain;charset=\”” + charset + “\””);  

partSet.add(part);  

}  

}  

private String listToMailString(ListString mailAddressList) {  

StringBuilder sbd = new StringBuilder();  

if (null != mailAddressList) {  

int listSize = mailAddressList.size();  

for (int i = 0; i  listSize; i++) {  

if (0 != i) {  

sbd.append(“;”);  

}  

sbd.append(“”).append(mailAddressList.get(i)).append(“”);  

}  

}  

return sbd.toString();  

}  

private ListString getrecipient() {  

ListString list = new ArrayListString();  

list.addAll(to);  

list.addAll(cc);  

list.addAll(bcc);  

return list;  

}  

public void addAttachment(String filePath) {  

addAttachment(filePath, null);  

}  

public void addTo(String mailAddress) {  

this.to.add(mailAddress);  

}  

public void addCc(String mailAddress) {  

this.cc.add(mailAddress);  

}  

public void addBcc(String mailAddress) {  

this.bcc.add(mailAddress);  

}  

public void addAttachment(String filePath, String charset) {  

if (null != filePath  filePath.length()  0) {  

File file = new File(filePath);  

try {  

addAttachment(file.getName(), new FileInputStream(file),  

charset);  

} catch (FileNotFoundException e) {  

System.out.println(“错误:” + e.getMessage());  

System.exit(1);  

}  

}  

}

如何将java在DOMINO中发送的邮件带上附件

我们要用DOMINO5R的例子重写一下:

rti.embedObject(EmbeddedObject.EMBED_ATTACHMENT, null,

attachFilePath, attachFilePath); // 添加附件

注:其中rti = (RichTextItem) memo.createRichTextItem(“Body”);

让邮件带上附件就一句话,很简单吧。

如果,你不明白其中的参数,还是会搞不出来,一个字晕!

其中前两个参数我就不说了,第三个和第四个参数写成一样就可以了。

强烈注意:

1* 添加的附件必须放在DOMINO服务器上,不能放在客户端添加附件,不要问为什么,这是事实。你在客户端的硬盘上无论放在哪,它也不让你上传。

2*我们的项目环境,DOMINO是运行在AS400上,它的安装目录是em_01,我们就假设把附件放在AS400 的em_01/test/test.tar,在程序使用相对路径,”test/test.tar”相对于邮件的根目录em_01.

如果,按我说的做法应该不会有问题了。若想看一个完整例子,请参考我的“java在收。发lotus邮件的实例了”。

java中怎么设置邮件发送两份附件

添加两次不行吗?

BodyPart attachmentBodyPart = new MimeBodyPart();

DataSource source = new FileDataSource(attachment);

attachmentBodyPart.setDataHandler(new DataHandler(source));

attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));

multipart.addBodyPart(attachmentBodyPart);

java发送邮件带多个附件

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月24日 10:02:49
下一篇 2024年3月24日 10:11:09

相关推荐

  • java怎么实现多个接口,java多个接口有相同的方法

    java中接口可以实现多个接口吗? 1、但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。 2、首先,java中的接口别说实现多个接口了,一个接口也不能实现。因为接口中的方法是没有方法体的,所以不能实现任何接口。其次,一个接口可以继承多个接口。 3、java中没有多继承(就是不能继承多个父类),只有多重继承。 java怎么定…

    2024年5月23日
    3500
  • excel如何冻结多个窗口,excel表中如何冻结多个窗口

    excel表格冻结窗口 1、打开excel表格,任意选中一个单元格,例如G3单元格。在顶部功能区选择点击【视图】-【窗口】-【拆分】选项拆分表格。拆分之后,可以看到表格中多出一个白色相交的十字线框。 2、Excel冻结首行首列Excel表格中点击「视图」-「窗口」-「冻结窗格」,选择「冻结首行」我们就可以直接固定首行的表头处,选择「冻结首列」能够固定住最左列…

    2024年5月23日
    4400
  • java怎么用循环创建多个button,java循环选择菜单怎么做

    如何用java创建一个按钮组,里面有10个按钮,分别写着0至9? 使用public void setBounds(int x,int y,int width,int height)移动组件并调整其大小。由 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。 //有些字符不在GBK中,所以文本使用了UTF-8编码。 在java s…

    2024年5月23日
    4800
  • java定义多个变量,java定义多个变量并赋值

    java中使用System.out.println如何输出多个变量? 1、这是一个字符串拼接问题,可以是System.out.println(i=+i+,j=+j);其中括号里 i=表示直接输出 i=这两个字符 后面的 + 表示连接一个变量。 2、通过System.out.println方式,多个输出内容通过+号进行连接输出。 3、调用方法 System.o…

    2024年5月22日
    3900
  • c语言输入输出多个,c语言中输出多个值

    c语言回圈中如何输出多个数组 1、C语言输出数组时,需要根据数组下标,或者指针移动进行输出。所以,一般不会用一个循环输出多个数组,这样操作不方便,而且降低效率。常规的做法是,在多个循环中,各自输出不同的数组。 2、C语言数组输出全部步骤如下:首先打开c语言项目,然后创建一个int类型的数组。然后规定数组的大小,再设置数组存储数据。然后在mian函数中,创建i…

    2024年5月21日
    5200
  • c语言怎么输出堆,c语言怎么输出多个结果

    C语言实现二叉堆(优先队列)。创建和插入数据,我把创建的函数的代码简… 结构性:二叉堆是一个完全二叉树 堆序性:所有的节点值均小于(大于)其后裔节点值,若所有节点值大于其后裔节点这样的二叉堆称为大根堆##点值均小于其后裔节点这样的二叉堆成为小根堆。 有几种简单而明显的方法实现优先队列。 二叉堆(binary heap)是一种对于优先队列的实现,可…

    2024年5月21日
    4800
  • 求解irr的多个解的excel方法的简单介绍

    麻烦能详细的指导一下如何用EXCEL计算IRR,谢谢 有一个函数,使用方法如下:IRR(values,guess)Values 为数组或单元格的引用,包含用来计算返回的内部收益率的数字。§Values必须包含至少一个正值和一个负值,以计算返回的内部收益率。 首先将鼠标滑动到单元格上方,单击一下“选中”,双击进入“输入状态”。调用IRR函数,即输入=IRR“;…

    2024年5月21日
    4800
  • c语言输入多个,c语言输入多个数字

    c语言中有几个输出和输入? 在 C 语言中,常用的输入输出函数包括以下几个: `printf()` 函数:用于输出信息到控制台或者文件,可以输出各种类型的数据,例如整数、浮点数、字符、字符串等。 putchar() getchar() 输出输入函数只针对单个字符的操作。puts(),gets() 输出输入函数可以单个字符操作(但是功能有限的),主要是针对字符…

    2024年5月21日
    5100
  • 关于excel怎么同时选定多个单元格的信息

    excel表格怎样下拉选项中同时选中多个 excel下拉列表怎么设置多选:首先建立表格,然后点击任务栏的“数据”,选择“下拉列表”。然后可以在新窗口中选择“从单元格选择下拉选项”。接下来选择先要写好的下拉内容,点击“确定”。 在随后打开的界面中点击【筛选】按钮。随后点击出现的下拉菜单。在接着弹出的下拉选项中使用鼠标点击的方式选中多个。接着即可看到多个数据已经…

    2024年5月20日
    7100
  • 多软件导入excel数据,导入多个excel文件

    matlab导入excel数据怎么操作 对于低版本,可以用xlsread()函数导入excel数据。 将需要导入的矩阵结构数据输入Excel,注意列与列与原矩阵的一一对应。2,输入保存数据后,使用以下步骤,我们有更好的名字作为变量的名称,我们想参考在MATLAB(例如,在MATLAB矩阵B矩阵参与操作,你可以命名为B。 首先需要双击桌面的Matlab软件快捷…

    2024年5月20日
    3700

发表回复

登录后才能评论



关注微信