Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS SES SDK send email with attachments

I'm using the official AWS Golang SDK to integrate with SES but can't find any information about how to add some attachments (pdf file represented as []byte in code) to the email.

Could you help me?

The current email sending code looks like this:

sesEmailInput := &ses.SendEmailInput{
    Destination: &ses.Destination{
        ToAddresses: []*string{aws.String("To address")},
    },
    Message: &ses.Message{
        Subject: &ses.Content{
            Data: aws.String("Some text"),
        },
        Body: &ses.Body{
            Html: &ses.Content{
                Data: aws.String("Some Text"),
            },
        },
    },
    Source: aws.String("From address"),
    ReplyToAddresses: []*string{
        aws.String("From address"),
    },
}
if _, err := s.sesSession.SendEmail(sesEmailInput); err != nil {
    return err
}
like image 482
i.van Avatar asked Apr 30 '17 18:04

i.van


People also ask

Can SES send email with attachment?

You can send messages with attachments through Amazon SES by using the Multipurpose Internet Mail Extensions (MIME) standard. Amazon SES accepts all file attachment types except for attachments with the file extensions in the following list.


1 Answers

To send attachments, use the SendRawEmail API instead of SendEmail. AWS documentation will generally refer to this as constructing a 'raw message' instead of explicitly calling out how to send attachments.

Example

From the AWS SDK for Go API Reference, linked below:

params := &ses.SendRawEmailInput{
    RawMessage: &ses.RawMessage{ // Required
        Data: []byte("PAYLOAD"), // Required
    },
    ConfigurationSetName: aws.String("ConfigurationSetName"),
    Destinations: []*string{
        aws.String("Address"), // Required
        // More values...
    },
    FromArn:       aws.String("AmazonResourceName"),
    ReturnPathArn: aws.String("AmazonResourceName"),
    Source:        aws.String("Address"),
    SourceArn:     aws.String("AmazonResourceName"),
    Tags: []*ses.MessageTag{
        { // Required
            Name:  aws.String("MessageTagName"),  // Required
            Value: aws.String("MessageTagValue"), // Required
        },
        // More values...
    },
}
resp, err := svc.SendRawEmail(params)

Further Reading

  • Amazon SES API Reference - SendRawEmail
  • AWS SDK for Go API Reference - SendRawEmail
  • AWS SES Documentation - Sending Raw Email Using the Amazon SES API - This is a good primer for email standards and constructing raw messages (including a section about attachments).
like image 149
Anthony Neace Avatar answered Sep 27 '22 22:09

Anthony Neace