通过 AWS SES v2 在 Go 中发送带有附件的原始电子邮件

通过 aws ses v2 在 go 中发送带有附件的原始电子邮件

php小编小新为您带来了一篇关于在Go中使用AWS SES v2发送带附件的原始电子邮件的文章。AWS SES v2是一种灵活可靠的电子邮件服务,而Go是一种强大的编程语言,两者的结合能帮助您轻松发送带有附件的原始电子邮件。本文将详细介绍如何使用AWS SES v2 API和Go语言编写代码,以实现这一功能。无论您是初学者还是有经验的开发者,本文都将为您提供清晰的指导,助您顺利完成任务。让我们一起开始吧!

问题内容

我正在尝试创建一个 http 端点来处理从网站提交的表单。

该表单具有以下字段:

姓名电子邮件电话电子邮件正文(电子邮件正文的文本)照片(最多 5 张)

然后,我的端点将向 [email protected] 发送一封电子邮件,其中照片作为附件,电子邮件正文如下:

john ([email protected]) says:email body ...

登录后复制

我是 go 新手,但我已经尝试让它工作 2 周了,但仍然没有任何运气。

我现在的代码是:

package ajimport (    "bytes"    "encoding/base64"    "fmt"    "io/ioutil"    "mime"    "net/http"    "net/mail"    "net/textproto"    "os"    "github.com/aws/aws-sdk-go-v2/aws"    "github.com/aws/aws-sdk-go-v2/service/sesv2"    "github.com/aws/aws-sdk-go-v2/service/sesv2/types"    "go.uber.org/zap")const expectedContentType string = "multipart/form-data"const charset string = "UTF-8"func FormSubmissionHandler(logger *zap.Logger, emailSender EmailSender) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        logger.Info("running the form submission handler...")        // get the destination email address        destinationEmail := os.Getenv("DESTINATION_EMAIL")        // get the subject line of the email        emailSubject := os.Getenv("EMAIL_SUBJECT")        // enforce a multipart/form-data content-type        contentType := r.Header.Get("content-type")        mediatype, _, err := mime.ParseMediaType(contentType)        if err != nil {            logger.Error("error when parsing the mime type", zap.Error(err))            http.Error(w, err.Error(), http.StatusBadRequest)            return        }        if mediatype != expectedContentType {            logger.Error("unsupported content-type", zap.Error(err))            http.Error(w, fmt.Sprintf("api expects %v content-type", expectedContentType), http.StatusUnsupportedMediaType)            return        }        err = r.ParseMultipartForm(10 

我的理解是(如果我错了,请纠正我)我必须以与此类似的格式构建原始消息。假设这是正确的,我只是不知道如何在 go 中做到这一点

解决方法

为了创建附件,您必须使用 base64 消息内容来 encode。

这里是发送 csv 作为附件的示例:

import (  // ...  secretutils "github.com/alessiosavi/GoGPUtils/aws/secrets"  sesutils "github.com/alessiosavi/GoGPUtils/aws/ses")type MailConf struct {    FromName string   `json:"from_name,omitempty"`    FromMail string   `json:"from_mail,omitempty"`    To       string   `json:"to,omitempty"`    CC       []string `json:"cc,omitempty"`}func SendRawMail(filename string, data []byte) error {    var mailConf MailConf    if err := secretutils.UnmarshalSecret(os.Getenv("XXX_YOUR_SECRET_STORED_IN_AWS"), &mailConf); err != nil {        return err    }    subject := fmt.Sprintf("Found errors for the following file: %s", filename)    var carbonCopy string    if len(mailConf.CC) > 0 {        carbonCopy = stringutils.JoinSeparator(",", mailConf.CC...)    } else {        carbonCopy = ""    }    raw := fmt.Sprintf(`From: "%[1]s" To: %[3]sCc: %[4]sSubject: %[5]sContent-Type: multipart/mixed;    boundary="1"--1Content-Type: multipart/alternative;    boundary="sub_1"--sub_1Content-Type: string/plain; charset=utf-8Content-Transfer-Encoding: quoted-printablePlease see the attached file for a list of errors--sub_1Content-Type: string/html; charset=utf-8Content-Transfer-Encoding: quoted-printable

%[6]s

Please see the attached file for the list of the rows.

--sub_1----1Content-Type: string/plain; name="errors_%[6]s"Content-Description: errors_%[6]sContent-Disposition: attachment;filename="errors_%[6]s";creation-date="%[7]s";Content-Transfer-Encoding: base64%[8]s--1--`, mailConf.FromName, mailConf.FromMail, mailConf.To, carbonCopy, subject, strings.Replace(filename, ".csv", ".json", 1), time.Now().Format("2-Jan-06 3.04.05 PM"), base64.StdEncoding.EncodeToString(data)) return sesutils.SendMail([]byte(raw))}

登录后复制

以上就是通过 AWS SES v2 在 Go 中发送带有附件的原始电子邮件的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2483418.html

(0)
上一篇 2025年3月4日 21:18:34
下一篇 2025年3月2日 17:55:42

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 提高Go项目开发效率:推荐的实用开发工具介绍

    高效开发Go语言项目:值得尝试的实用开发工具介绍 Go语言作为一种高效、简洁的编程语言,受到越来越多开发者的青睐。然而,在实际项目开发中,有时候我们可能会遇到一些繁琐的工作,这就需要借助一些实用的开发工具来提高开发效率。本文将介绍几款值得尝…

    2025年3月4日
    200
  • 深入了解Go语言库:五个不可错过的利器

    标题:深入了解Go语言库:五个不可错过的利器 Go语言作为一门快速、高效的编程语言,其标准库和第三方库为开发者提供了丰富的工具和资源。本文将介绍五个在Go语言开发中不可错过的利器,让我们一起深入了解这些强大的库,并附上具体的代码示例。 1.…

    2025年3月4日
    200
  • Go语言IDE开发工具盘点:选择适合自己的最佳方案

    Go语言是一种高效、简洁的编程语言,越来越受到开发者的青睐。针对Go语言的开发工具也是开发者们必不可少的利器之一。本文将盘点一些常用的Go语言IDE开发工具,分析各自的特点和适用场景,帮助开发者选择最适合自己的开发工具。 一、Visual …

    2025年3月4日
    200
  • Go语言库全面解析:五款提升开发效率的神器

    Go语言作为一种快速、高效的编程语言,越来越受到开发人员的青睐。在Go语言的生态系统中,有许多优秀的库(library)可以帮助开发人员提高工作效率,简化开发过程。本文将对五款提升开发效率的神器进行全面解析,为读者呈现这些优秀的库的特点、用…

    2025年3月4日
    200
  • 提升编程效率:Golang工具助力方案

    Golang是一种受欢迎的开发语言,它具有高效的并发能力和简洁的语法,深受开发者的喜爱。然而,在实际编程过程中,我们常常会遇到一些重复的任务或者困难的问题,这时就需要借助一些优秀的辅助工具来提高开发效率和质量。本文将介绍一些常用的Golan…

    2025年3月4日
    200
  • Go语言编程:提高效率的简洁实践

    Golang简洁之道:高效编程实践 作为一种简洁高效的编程语言,Golang(又称Go语言)在近年来逐渐受到程序员们的关注和喜爱。其简洁的语法、快速的编译速度以及强大的并发特性,使得Golang成为许多开发者们的首选之一。然而,要想在Gol…

    2025年3月4日
    200
  • 使用Golang编写高性能的数据库存储过程

    标题:利用Golang创建高效的存储过程 在软件开发过程中,存储过程是一种保存在数据库中的一组SQL语句集合,可以被客户端程序随时调用执行。存储过程可以提高数据库访问效率、减少网络传输开销,并且可以实现业务逻辑的封装,保证数据操作的一致性和…

    2025年3月4日
    200
  • 推荐五款Go语言常用框架,让您快速入门

    Title: 快速上手:五款Go语言常用框架推荐 近年来,随着Go语言的流行,越来越多的开发者选择采用Go进行项目开发。Go语言以其高效、简洁和性能优越等特点受到了广泛关注。在Go语言开发中,选择适合的框架能够提高开发效率和代码质量。本文将…

    2025年3月4日
    200
  • 发现Golang对云计算的推动力量

    Golang,也称作Go语言,是由Google开发的一种编程语言,是一种面向并发编程和网络编程的高级编程语言。近年来,随着云计算技术的快速发展,Golang在云计算领域的应用也逐渐得到重视。本文将探索Golang如何助力云计算发展,通过具体…

    2025年3月4日
    200
  • 揭秘Golang开发中的必备利器

    Golang开发利器大揭秘:你不容错过的工具 Go语言(Golang)作为一门快速、高效的编程语言,越来越受到开发者们的青睐。然而,要想在Golang开发中发挥出最大的效能,除了熟练掌握语言本身的特性外,选择和掌握好适合的工具也是至关重要的…

    2025年3月4日
    200

发表回复

登录后才能评论