【问题标题】:How to implement aws ses SendRawEmail with attachment in golang如何在golang中实现带有附件的aws ses SendRawEmail
【发布时间】:2017-11-23 23:04:26
【问题描述】:

我需要在 golang 中实现带有附件的 Amazon ses SendRawEmail,
我尝试使用以下代码:

session, err := session.NewSession()
svc := ses.New(session, &aws.Config{Region: aws.String("us-west-2")})

source := aws.String("XXX <xxx@xxx.com>")
destinations := []*string{aws.String("xxx <xxx@xxx.com>")}
message := ses.RawMessage{ Data: []byte(` From: xxx <xxx@xxx.com>\\nTo: xxx  <xxx@xxx.com>\\nSubject: Test email (contains an attachment)\\nMIME-Version: 1.0\\nContent-type: Multipart/Mixed; boundary=\"NextPart\"\\n\\n--NextPart\\nContent-Type: text/plain\\n\\nThis is the message body.\\n\\n--NextPart\\nContent-Type: text/plain;\\nContent-Disposition: attachment; filename=\"sample.txt\"\\n\\nThis is the text in the attachment.\\n\\n--NextPart--" `)}
input := ses.SendRawEmailInput{Source: source, Destinations: destinations, RawMessage: &message}
output, err := svc.SendRawEmail(&input)

但是在我收到的邮件中,它显示的是我在邮件中给出的内容,而不是附件。不知道到底是什么问题???

【问题讨论】:

    标签: amazon-web-services go amazon-ses


    【解决方案1】:

    请参阅AWS example 发送带附件的 RAW 电子邮件。

    实施建议:如上述参考示例中所述,用于轻松撰写电子邮件并以字节形式获取电子邮件并将其发送到SES。

    使用库gopkg.in/gomail.v2 编写带有附件的电子邮件,然后调用WriteTo 方法。

    var emailRaw bytes.Buffer
    emailMessage.WriteTo(&emailRaw)
    
    // while create instance of RawMessage
    RawMessage: &ses.RawMessage{
        Data: emailRaw.Bytes(),
    }
    

    祝你好运!


    编辑:评论。

    撰写电子邮件-

    msg := gomail.NewMessage()
    msg.SetHeader("From", "alex@example.com")
    msg.SetHeader("To", "bob@example.com", "cora@example.com")
    msg.SetHeader("Subject", "Hello!")
    msg.SetBody("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
    msg.Attach("/home/Alex/lolcat.jpg")
    
    var emailRaw bytes.Buffer
    msg.WriteTo(&emailRaw)
    
    message := ses.RawMessage{ Data: emailRaw.Bytes() }
    
    // Remaining is same as what you mentioned the question.
    

    【讨论】:

    • ses.RawMessage.Data 值不是带附件的有效电子邮件。我已经用电子邮件示例更新了答案。
    • 也许msg.WriteTo(emailRaw) 应该是msg.WriteTo(&amp;emailRaw)
    • @brunetto 感谢您发现错字问题。我已经更新了代码 sn-p。
    • @jeevatkm AWS 示例实际上是不正确的;在将原始消息转换为字节之前不应转义换行符(刚刚通过调用 SES 验证了这一点)。
    • @yangmillstheory 抱歉延迟回复。在上面的例子中,新行没有被明确处理。您能否指出它是哪一行,或者您可以帮助更新上面的代码 sn-p。谢谢。
    【解决方案2】:

    如果您尝试从字节附加文件:

    msg.Attach("report.pdf", gomail.SetCopyFunc(func(w io.Writer) error {
        _, err := w.Write(reportData)
        return err
    }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 2018-08-28
      • 2017-05-01
      • 2014-05-27
      • 2017-09-28
      相关资源
      最近更新 更多