从表单发送电子邮件附件

Posted

技术标签:

【中文标题】从表单发送电子邮件附件【英文标题】:Sending email attchment from form 【发布时间】:2019-03-07 05:41:10 【问题描述】:

我正在尝试从我的流星应用程序中的表单发送一封带有附件的电子邮件。发送电子邮件很好,它可以工作,但是,我不知道如何发送附件。我的表单使用户能够附加文件,但是,我不知道如何将其传递给服务器以作为附件发送。

我看过流星documentation 并没有那么有用。

它指向mailcompser 4。

当我在服务器上 console.log 附件时,名称会出现。它说它需要一条路径,但是我不知道那是什么。

谁能告诉我我做错了什么?

路径:client

class EmailForm extends React.Component 
  constructor(props) 
    super(props);
    this.state = 
    ;

    this.fileInput = React.createRef();
  

  handleSubmit(event) 
    event.preventDefault();

    const errors = jobApplicationValidation(this.state);

    const attachments = [
      
        fileName: this.fileInput.current.files[0].name,
      ,
    ];

    const attachments = [];

    attachments.push(this.fileInput.current.files[0]);

    Meteor.call(
      'sendEmail',
      this.props.email,
      this.props.myEmail,
      this.props.subject,
      this.props.text,
      this.fileInput.current.files[0],
    );
  

  render() 
    return (
      <Form>
        <input
          type="file"
          ref=this.fileInput
        />
        <Button onClick=this.handleSubmit>Apply</Button>
      </Form>
    );
  

路径:Server

Meteor.methods(
  sendJobApplicationEmail(to, from, subject, text, attachments) 
      // Make sure that all arguments are strings.
    check([to, from, subject, text], [String]);

    this.unblock();

    Email.send( to, from, subject, text, attachments );
  ,
);

【问题讨论】:

上传文件并不像人们想象的那么简单。我可以推荐ostrio:files 将文件上传到服务器上的非文件系统目标。上传后,您可以发送带有附件的邮件,成功后您可以删除上传的二进制文件或将其保存在虚拟发送文件夹中 我建议将文件上传到 Amazon S3 等文件存储,然后通过 URL 发送附件。 S3 支持私有链接,防止文件被所有人访问。 【参考方案1】:

英俊的威尔森来救援:

Meteor 的默认邮件包 3 在后面使用 mailcomposer 14 场景。确保您的附件数组遵循中列出的选项 mailcomposer 的附件文档 40. 在您的示例中,您引用 PDF,因此您可能希望您的附件数组看起来像 喜欢:

 ... attachments: [   
     fileName: 'book.pdf',
     filePath: '/home/hexen/Downloads/book.pdf',   , ]

https://forums.meteor.com/t/meteor-email-with-attachment/23026

但是我们在 cmets 中的伙伴是正确的,您需要一种将这些文件上传到服务器的方法,ostrio:files 是目前最好的软件包之一。

以下是我们应用程序中的一个示例,可指导您一路走好:

MailQueue.sendMail(
            to: payslip.employee.email,
            from: 'Payroll System <no-reply@fslabs.net>',
            subject: `Payslip of $payslip.payrollDate`,
            html: `Hello $payslip.employee.full_name, <br /><br />Here is your payslip for payroll of $payslip.payrollDate<br /><br />Thanks.`,
            attachments: [ path: `'/tmp/$payslip.employee.full_name.zip'` ],
          );

首先,我们依赖Meteor Mailer,因为它允许我们自定义邮件发送选项(没关系,您不必使用它)。我们在服务器上创建文件,存储在/tmp/ 目录中。

【讨论】:

以上是关于从表单发送电子邮件附件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 表单发送带有附件的电子邮件?

我可以通过自动电子邮件从 Google 表单/Google 表格发送多个上传的附件吗?

电子邮件表单根据附件发送多封邮件

来自表单的 WP 邮件附件,没有在文件管理器上上传文件

多上传附件联系表单

无法在多封电子邮件中重复使用电子邮件附件