起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3781|回复: 5

[处理中] (紧急!)如何实现发邮件附件功能

[复制链接]

118

主题

324

帖子

973

积分

高级会员

Rank: 4

积分
973
QQ
发表于 2020-2-28 10:59:17 | 显示全部楼层 |阅读模式
如题,如何实现发邮件附件功能,目前牛刀云的邮件组件好像不支持,我参与以下代码实现了服务发邮件功能(用于后台定时调用),可以发多人及抄送多人,但发附件不知格式如何转化才成功能发附件,请牛刀云支持一下看有没有办法,昨天开会研发同事要求APP将 附件图片也发出来,并附件可能有多个,谢谢![{"storeFileName":"anoy_C8CE8E1881000001C33F4EB41DEBABE0.jpg","realFileName":"1IMG_20200226_142820.jpg"}]这个是牛刀云EXCEL导出附件或图片格式,与下面案例对不上,要如何处理?谢谢!

//原文链接:http://liuwanxiang.iteye.com/blog/2212309  
//需要下载mail.jar  地址:http://www.oracle.com/technetwork/java/index-138643.html
//简单调试一下可用,替换一下邮箱和授权码,邮箱密码是授权码,详情百度。
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
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;

/**
* 邮件多人发送,可设置发送,抄送,密送
*
* @author zhutongyu
*
*/
public class SendMail {

    private static SendMail instance = null;

    private SendMail() {

    }

    public static SendMail getInstance() {
        if (instance == null) {
            instance = new SendMail();
        }
        return instance;
    }

    public void send(String to[], String cs[], String ms[], String subject,
            String content, String formEmail, String fileList[]) {
        try {
            Properties p = new Properties(); // Properties p =
            // System.getProperties();
            p.put("mail.smtp.auth", "true");
            p.put("mail.transport.protocol", "smtp");
            p.put("mail.smtp.host", "smtp.qq.com");
            p.put("mail.smtp.port", "25");
            // 建立会话
            Session session = Session.getInstance(p);
            Message msg = new MimeMessage(session); // 建立信息
            BodyPart messageBodyPart = new MimeBodyPart();
            Multipart multipart = new MimeMultipart();
            msg.setFrom(new InternetAddress(formEmail)); // 发件人

            String toList = null;
            String toListcs = null;
            String toListms = null;

            // 发送,
            if (to != null) {
                toList = getMailList(to);
                InternetAddress[] iaToList = new InternetAddress()
                        .parse(toList);
                msg.setRecipients(Message.RecipientType.TO, iaToList); // 收件人
            }

            // 抄送
            if (cs != null) {
                toListcs = getMailList(cs);
                InternetAddress[] iaToListcs = new InternetAddress()
                        .parse(toListcs);
                msg.setRecipients(Message.RecipientType.CC, iaToListcs); // 抄送人
            }

            // 密送
            if (ms != null) {
                toListms = getMailList(ms);
                InternetAddress[] iaToListms = new InternetAddress()
                        .parse(toListms);
                msg.setRecipients(Message.RecipientType.BCC, iaToListms); // 密送人
            }
            msg.setSentDate(new Date()); // 发送日期
            msg.setSubject(subject); // 主题
            msg.setText(content); // 内容
            // 显示以html格式的文本内容
            messageBodyPart.setContent(content, "text/html;charset=gbk");
            multipart.addBodyPart(messageBodyPart);

            // 2.保存多个附件
            if (fileList != null) {
                addTach(fileList, multipart);
            }

            msg.setContent(multipart);
            // 邮件服务器进行验证
            Transport tran = session.getTransport("smtp");
            tran.connect("smtp.qq.com", "postmaster@qq.com",
                    "asiamedia");
            tran.sendMessage(msg, msg.getAllRecipients()); // 发送
            System.out.println("邮件发送成功");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 添加多个附件
    public void addTach(String fileList[], Multipart multipart)
            throws MessagingException, UnsupportedEncodingException {
        for (int index = 0; index < fileList.length; index++) {
            MimeBodyPart mailArchieve = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(fileList[index]);
            mailArchieve.setDataHandler(new DataHandler(fds));
            mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),
                    "GBK", "B"));
            multipart.addBodyPart(mailArchieve);
        }
    }

    private String getMailList(String[] mailArray) {

        StringBuffer toList = new StringBuffer();
        int length = mailArray.length;
        if (mailArray != null && length < 2) {
            toList.append(mailArray[0]);
        } else {
            for (int i = 0; i < length; i++) {
                toList.append(mailArray);
                if (i != (length - 1)) {
                    toList.append(",");
                }

            }
        }
        return toList.toString();

    }

    public static void main(String args[]) {
        SendMail send = SendMail.getInstance();
        String to[] = { "zhutongyu@qq.com" };
        String cs[] = null;
        String ms[] = null;
        String subject = "测试一下";
        String content = "这是邮件内容,仅仅是测试,不需要回复";
        String formEmail = "zhutongyu@qq.com";
        String[] arrArchievList = new String[4];
        arrArchievList[0] = "c:\\2012052914033429140297.rar";
        arrArchievList[1] = "c:\\topSearch.html";
        arrArchievList[2] = "c:\\topSearch2.html";
        arrArchievList[3] = "c:\\logo_white.png";
        // 2.保存多个附件
        send.send(to, cs, ms, subject, content, formEmail, arrArchievList);
    }

}

10

主题

2831

帖子

3783

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3783
QQ
发表于 2020-2-28 17:21:18 | 显示全部楼层
需要发应用及正式服务器请在服务群里联系QQ:516367879。
回复 支持 反对

使用道具 举报

118

主题

324

帖子

973

积分

高级会员

Rank: 4

积分
973
QQ
 楼主| 发表于 2020-3-2 08:26:54 | 显示全部楼层
gaofan 发表于 2020-2-28 17:21
参考3楼回复:http://bbs.wex5.com/forum.php?mod=viewthread&tid=212578

   放假在家研究了较长时间,看了参考论坛及查了网上资料还是没有搞出来,以下函数对应参数是哪个,参考论坛到最后也没有说清楚,网友还在问,麻烦再帮助进一步提示一下如何拼出上面服务要用的图片或附件地址,最好简单写一下实例,非常感谢!

  调用函数: public String presignedGetObject(@RequestParam String objectName, @RequestParam(defaultValue="604800",required=false) Integer expires)
数据库已知图片JSON:[{"storeFileName":"anoy_C8CE8E1881000001C33F4EB41DEBABE0.jpg","realFileName":"1IMG_20200226_142820.jpg"}]
回复 支持 反对

使用道具 举报

998

主题

4330

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10732
QQ
发表于 2020-3-2 08:29:14 | 显示全部楼层
使用jodd工具包
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

46

主题

168

帖子

501

积分

高级会员

Rank: 4

积分
501
QQ
发表于 2020-3-3 12:23:22 | 显示全部楼层
本帖最后由 dese 于 2020-3-8 20:25 编辑

  
回复 支持 反对

使用道具 举报

118

主题

324

帖子

973

积分

高级会员

Rank: 4

积分
973
QQ
 楼主| 发表于 2020-3-4 08:45:44 | 显示全部楼层
dese 发表于 2020-3-3 12:23
我解决了,可以私聊我

加我QQ,2264580808,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-19 09:54 , Processed in 0.079966 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表