为带有附件的电子邮件设置多部分

2024-03-16

从我的应用程序中,我发送带有附件的邮件。完整的代码在这里

public int sendMail(MailDraft mailDraftInstance, mailInstance, path){                               //Send the mail
    String mailSubject  = mailDraftInstance.subject
    String toAddress    = mailDraftInstance.toAddress
    String ccAddress    = mailDraftInstance.ccAddress
    String bccAddress   = mailDraftInstance.bccAddress
    String fromAddress  = mailDraftInstance.fromAddress
    String body         = mailDraftInstance.body

    String smtpUsername = 'myusername'
    String smtpPassword = 'mypwd'

    /*** set the SMTP properties and Authenticate*****/
    Properties smtpMailProperties
    Session mailSession
    smtpMailProperties = mailInstance.getSmtpConnectionProperties()
    mailSession = mailInstance.getMailSession(smtpMailProperties, smtpUsername, smtpPassword)

    try {

        /**** Set the Header *************/
        User loggedInUser = User.get(SecurityContextHolder.context.authentication.principal.id)
        Address address = new InternetAddress(mailDraftInstance.fromAddress);
        Address replyAddress = new InternetAddress(mailDraftInstance.fromAddress);
        Message message = new MimeMessage(mailSession);
        message.setFrom(address); 
        //message.addFrom(address); //Set the from address with the logged in user email
        message.setReplyTo(replyAddress)

        /*** set Recipients*********/
        String recipientType = 'TO'
        setMailRecipients(message, toAddress, recipientType, toAddressError)
        recipientType = 'CC'
        setMailRecipients(message, ccAddress, recipientType, ccAddressError)
        recipientType = 'BCC'
        setMailRecipients(message, bccAddress, recipientType, bccAddressError)

        message.setSubject(mailSubject);    

        Multipart multiPart = new MimeMultipart("alternative");   // Create an "Alternative" Multipart message
        // Multipart multiPart = new MimeMultipart("mixed");


        MimeBodyPart text = new MimeBodyPart();
        MimeBodyPart html = new MimeBodyPart();

        text.setText(body.replaceAll("\\<[^>]*>","").replaceAll("&nbsp;"," ").replaceAll("&amp;","&"));  //set the text/plain version
        html.setContent(Jsoup.parse(body).html(), "text/html");     //set the text/html version

        multiPart.addBodyPart(text);
        multiPart.addBodyPart(html);


        /*  // Set the Body 
        Multipart multiPart = new MimeMultipart();
        MimeBodyPart messageHtml = new MimeBodyPart();  //Create a mime body 
        messageHtml.setContent(body, "text/html");      //set the content type as HTML
        multiPart.addBodyPart(messageHtml);*/

        // Add the Attachments
        if(!mailDraftInstance.attachments.isEmpty()){
            Mail.attachFiles(mailDraftInstance.attachments, multiPart, path)
        }  
        int i=0;
        mailDraftInstance.attachments.each{
            i++
        }
        message.setContent(multiPart);      //set the content
        Transport.send(message);            //send the mail
    }catch (Exception e) {
        if(e instanceof AddressException){
            println "Email Recipient Address error"                             //Error with the TO Or CC Or BCC Adresss
            return addressErrorType
        }else{
            println e                                                           //Other errors, may be with the SMTP server
            println "Cannot send email as an error occurred"
            return addressErrorType
        }
    }
    return mailSentSuccessfully    //mail sent successfully
}



  public static attachFiles(def attachments, Multipart multiPart, String path){                     //Attach files
    attachments.each {

        def attachmentId = it.id
        String newFile= TrainingService.createFile(attachmentId, path)

        MimeBodyPart fileAttachmentPart = new MimeBodyPart();
        FileDataSource attachmentfile = new FileDataSource(newFile);
        fileAttachmentPart.setDataHandler(new DataHandler(attachmentfile));
        println "newFile============="+attachmentfile.getName()
        fileAttachmentPart.setFileName(attachmentfile.getName());
        multiPart.addBodyPart(fileAttachmentPart);

    }

}

如果我设置

  Multipart multiPart = new MimeMultipart("alternative"); 

一些客户端(yahoomail)收不到附件。

那么应该使用多部分设置来接收包含文本、html 和附件的电子邮件吗?


如果您希望邮件同时包含备用部分和附件,则需要两个多部分,一个嵌套在另一个中。外部多部分应该是多部分/混合的。该多部分的第一个主体部分应该是多部分/替代部分。外部多部分的第二个主体部分应该是附件。内部多部分包含纯文本和 html 正文部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为带有附件的电子邮件设置多部分 的相关文章

  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua
  • Java 中如何将 char 转换为 int? [复制]

    这个问题在这里已经有答案了 我是Java编程新手 我有例如 char x 9 我需要得到撇号中的数字 即数字 9 本身 我尝试执行以下操作 char x 9 int y int x 但没有成功 那么我应该怎么做才能得到撇号中的数字呢 ASC
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 2>&1 在 PowerShell 中意味着什么

    我有以下脚本 if timeout ne null var timeout 2 gt 1 gt logDir logName else var2 gt 1 gt logDir logName 我很好奇什么2 gt 1是 或者 它代表什么 我
  • 同级别CSS

    如果我有 3 个 div 在同一级别 而不是一个在另一个 如何在不使用 ID 和类的情况下将鼠标悬停在另一个 div 上时更改另一个 div 的颜色 我想要这样的东西 div div div div div div 和CSS 1 hover
  • firebug (1.10.1) 表明 javascript 不限于 firefox (13.0) 中的单个线程

    今天在 Firefox 中调试一些客户端 JavaScript 时 我遇到了一些我觉得很奇怪而且有点令人不安的事情 另外 在使用 IE VS2010 调试相同的脚本时 我无法复制此行为 我创建了一个简单的示例 html 文档来说明我所看到的
  • 如何使用 DateTime 类在 PHP 中进行时区转换?

    我正在尝试将当前时间转换为 UTC 并将 UTC 转换为当前时区 这是我所做的 schedule date new DateTime triggerOn new DateTimeZone UTC triggerOn schedule dat
  • 卸载 gcc

    我想通过终端卸载我的 gcc 当我打字时 gcc version 输出是 gcc Ubuntu 5 4 0 6ubuntu1 16 04 4 5 4 0 20160609 Copyright C 2015 Free Software Fou
  • 使用外部模块的类型增强模块声明

    Context 我正在为 NativeScript 制作一个 React 渲染器 即允许您使用 React 声明 NativeScript UI 的库 并且我想为其提供类型 React 的类型已经完全支持 React DOM 即自始至 终都
  • 如何将 sha1() 密码转换为 FOSUserBundle?

    我有一个遗留应用程序 可以使用以下命令对密码进行加密sha1 功能 无盐 现在该网站正在转换为 Symfony2 和 FOSUserBundle 我如何将它们转移到新数据库 我有同样的问题 只需像 iamdto 所解释的那样覆盖编码器 ap
  • 在 ReSharper 中禁用 C# 6.0 支持

    在使用ReSharper时 它建议 为此项目启用C 6 0支持 我愚蠢地点击了它 现在正如广告所宣传的那样 它为我提供了 C 6 0 的建议 然后给了我错误 因为我在这个项目中没有使用 C 6 0 如何禁用 C 6 0 支持 使其恢复到之前
  • 如何在同一个项目中拥有 iOS 应用程序和 OS X 应用程序?

    我见过这个问题 https stackoverflow com questions 4872541 is it possible to have both an ios app and mac app in the same project
  • 可以安装 EGit:缺少要求:Git Team Provider Core

    所以我将 Coldfusion Builder 与 Ecplise 结合使用 我正在尝试在其中安装 EGit 以便我可以执行 Git 操作 我唯一能安装的是 EGit 0 11 1http download ecplise org rele
  • 如何使用 HTML 输入文件类型限制文件类型?

    如何使用 HTML 输入文件类型限制文件类型 我有这个
  • 编程错误:在 django 中同时使用 order_by 和 unique 时

    我有一个如下所示的模型 class ProductScore models Model client models ForeignKey User created models DateTimeField default datetime
  • Django 复合/嵌套/子表单?

    我正在寻找这些 Django 的更新版本超级形式 http code djangoproject com ticket 3706 似乎无法让它在 Django 1 2 中工作 特别是 我希望它能够与 ModelForms 一起使用 我的用例
  • 存储和查询气象数据大数据集的更好方法是什么

    我正在寻找一种便捷的方式来存储和查询大量气象数据 几TB 有关问题中间数据类型的更多信息 之前我一直在寻找 MongoDB 的方向 我自己之前的很多项目都使用过它 而且处理起来很舒服 但最近我发现了HDF5 http en wikipedi
  • 下拉菜单 - jQuery/CSS

    我正在做的下拉菜单有问题 请检查此屏幕截图 http img215 imageshack us img215 8449 hovermenu png http img215 imageshack us img215 8449 hovermen
  • JBoss类加载问题

    我有一个在 tomcat 上完美运行的 Web 应用程序 war 文件 现在我需要让这个相同的应用程序在 JBoss 4 2 2 上运行 同一 JBoss 实例上运行着其他应用程序 问题是当我尝试在 JBoss 上部署 war 应用程序时
  • Java 中是否存在可变的 URL/URI 对象?

    我有一个字符串形式的 URL 我希望对其进行各种修改 具体来说 如果查询字符串中的值已存在 我需要修改它们 如果不存在 则创建它们 在我看来 应该已经有一个现有的类 我可以使用我的 URL 作为字符串来构造该类 该类会将 URL 拆分为其组
  • 在unix中使用sed反转四个字母的长度

    如何反转四个长度的字母sed 例如 the year was 1815 反向至 the raey was 5181 这是我的尝试 cat filename sed s a z a z 2 1 但它并没有按照我的预期工作 不确定是否可以在所有
  • Android-NDK-添加本机支持-NDK 位置在首选项中无效

    我正在尝试使用调试模式 调试为 Android 本机应用程序 控制台说我需要添加本机支持 但是 当我按照说明进行操作时 它显示如下图 我应该如何处理 NDK 位置在首选项中无效 任何意见将是有益的 我对此很陌生 谢谢 该示例是 NDK 示例
  • 为带有附件的电子邮件设置多部分

    从我的应用程序中 我发送带有附件的邮件 完整的代码在这里 public int sendMail MailDraft mailDraftInstance mailInstance path Send the mail String mail