当前位置: 首页 > 知识库问答 >
问题:

发送带有附件的电子邮件通过TEA postgresql从内容获取数据

巫马俊力
2023-03-14

我想向所有电子邮件收件人发送附件。

这是Json。

{
 "webId": 1001,
 "clientId": 592571,
 "startDate": null,
 "endDate": null,
 "externalKey": null,
 "fromEmail": "abc@gmail.com",
 "fromName": "Test",
 "subject": "hello new",
 "body": "This is a test mail new with attachment",
 "status": "SUCCESS",
 "sentDate": null,
 "sendAttempts": 1,
 "permanentFailure": false,
 "emailRecipientModel": [
 {
      "webId": 1101,
      "clientId": 592571,
      "startDate": null,
      "endDate": null,
      "emailId": 1001,
      "emailAddress": "xyz@gmail.com",
      "status": "PENDING",
      "smtpStatusCode": 123,
      "recipientType": "TO"
 },
 {
      "webId": 1102,
      "clientId": 592571,
      "startDate": null,
      "endDate": null,
      "emailId": 1001,
      "emailAddress": "abc123@gmail.com",
      "status": "PENDING",
      "smtpStatusCode": 123,
      "recipientType": "TO"
 }
 ],
 "emailAttachmentModel": [
 {
      "webId": 1201,
      "clientId": 592571,
      "emailId": 1001,
      "key": "Test Key",
      "location": "Test Location",
      "name": "TestName.txt",
      "content": "VkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZENCQmRIUmhZMmh0Wlc1MERRb05DbFJvYVhNZ2FYTWdZU0IwWlhOMElIUmxlSFFnUVhSMFlXTm9iV1Z1ZEEwS0RRcFVhR2x6SUdseklHRWdkR1Z6ZENCMFpYaDBJRUYwZEdGamFHMWxiblFOQ2cwS1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDQkJkSFJoWTJodFpXNTBEUW9OQ2xSb2FYTWdhWE1nWVNCMFpYTjBJSFJsZUhRZ1FYUjBZV05vYldWdWRBMEs="
 }
 ]
}

现在我的电脑上有一个文本文件,我已将其转换为BASE64并将其设置为内容字段。现在,如何将此内容发送到电子邮件附件。

这是我的功能

public Email sendEmail(Email email){

    JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
    
    List<EmailConfig> emailConfigs = emailConfigRepository.findAllByClientWebId(email.getClient().getWebId());
    
    EmailConfig emailConfig;
    
    if (emailConfigs.iterator().hasNext()){
        emailConfig = emailConfigs.iterator().next();
    }else{
        throw new ResourceNotFoundException(HttpStatus.NOT_FOUND.getReasonPhrase());
    }
    
    javaMailSender.setHost(emailConfig.getHostName());
    javaMailSender.setPort(emailConfig.getPortNo());
    javaMailSender.setUsername(emailConfig.getEmail());
    javaMailSender.setPassword(emailConfig.getPassword());

    Properties javaMailProperties = new Properties();
    javaMailProperties.put("mail.smtp.starttls.enable", "true");
    javaMailProperties.put("mail.smtp.auth", "true");
    javaMailProperties.put("mail.transport.protocol", "smtp");
    javaMailProperties.put("mail.debug", "true");
    
    try{

        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        helper.setFrom(email.getFromEmail());

        String recipients = email.getEmailRecipient().stream()
            .map(EmailRecipient::getEmailAddress)
            .collect( Collectors.joining( "," ) );

        helper.setTo(InternetAddress.parse(recipients));
        helper.setSubject(email.getSubject());
        helper.setText(email.getBody());
        //helper.addAttachment(emailAttachment.getName(),file);        //need help here
        
        javaMailSender.setJavaMailProperties(javaMailProperties);
        javaMailSender.send(message);
    }catch (Exception exception){
        exception.printStackTrace();
        email.setStatus(EmailStatus.FAILED);
    }
    
    return email;
}

将有一个附件列表,因此如何获取该列表并将其发送给所有收件人。

我们将不胜感激。

共有1个答案

田易安
2023-03-14

创建临时文件

File file = File.createTempFile(emailAttachment.getName(), ".tmp");
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(emailAttachment.getContent());
fileWriter.close();

就这样使用:

helper.addAttachment(emailAttachment.getName(), file);
 类似资料:
  • 问题内容: 我似乎找不到我编写的应该发送带有附件的电子邮件的php函数的问题。我已经为此苦苦挣扎了一段时间了。 编辑 问题是邮件的消息与文件混合在一起并作为附件发送。 问题答案: Artefacto让我更加关注输出,并且找到了解决方法:

  • 问题内容: 我正在尝试在带有附件的codeigniter上发送电子邮件。 我总是成功收到电子邮件。但是,我从未收到带有附件的文件。以下是代码,非常感谢所有评论。 问题答案: $ this- >电子邮件-> attach() 使您可以发送附件。将文件路径/名称放在第一个参数中。注意:使用文件路径,而不是URL。对于多个附件,请多次使用该功能。例如:

  • 我正试图通过console/cron使用CakePHP 1.3电子邮件组件发送电子邮件。电子邮件被发送出去了 通过表单完成后,电子邮件将与附件一起成功发送。我已经尝试添加了$this- 我的代码如下: 所以,基本上我的问题是,当我通过控制台/cron运行外壳脚本时,我如何获得附件发送的电子邮件。 提前谢谢你。

  • 尝试发送带有pdf附件的电子邮件,尝试使用swickmailer,但没有成功,此代码使用zip但不使用PDF:( 邮件被发送罚款,我得到的邮件:但附件是不存在的,在meial有所有的bas64编码在电子邮件像: onatatent-Type: Application/octet-stream; name="media.pdf"Content-transver-Encode: base 64 Con

  • 问题内容: 是否有用于NodeJS的库,用于发送带有附件的邮件? 问题答案: 是的,这非常简单,我使用nodemailer: 然后阅读文件并发送电子邮件:

  • 问题内容: 如何使用Outlook 2010发送带有附件的电子邮件(本地文件或Intranet中的文件)? 似乎不起作用。 问题答案: 不,这根本不可能。协议中对此没有规定,如果可能的话,这将是一个巨大的安全漏洞。 发送文件但让客户端发送我能想到的电子邮件的最佳方法是: 让用户选择一个文件 将文件上传到服务器 上传后让服务器返回随机文件名 在消息正文中建立一个包含上载文件的URL 的链接