Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel Golang AWS SES xlsx附件损坏_Excel_Amazon Web Services_Go_Mime Types_Amazon Ses - Fatal编程技术网

Excel Golang AWS SES xlsx附件损坏

Excel Golang AWS SES xlsx附件损坏,excel,amazon-web-services,go,mime-types,amazon-ses,Excel,Amazon Web Services,Go,Mime Types,Amazon Ses,在golang,我试图发送一封附有XLSX文件的电子邮件。 我使用github.com/tealag/xlsx/v3将xlsx文件生成为字节数组,当与web服务器(这里是gin)一起使用时,它运行良好,如下所示: c.Header(“内容描述”、“文件传输”) c、 标题(“内容类型”、“应用程序/vnd.openxmlformats of iceDocument.spreadsheetml.sheet”) c、 标题(“内容处置”、“附件;文件名=“+time.Now().UTC().Form

在golang,我试图发送一封附有XLSX文件的电子邮件。 我使用
github.com/tealag/xlsx/v3
将xlsx文件生成为字节数组,当与web服务器(这里是gin)一起使用时,它运行良好,如下所示:

c.Header(“内容描述”、“文件传输”)
c、 标题(“内容类型”、“应用程序/vnd.openxmlformats of iceDocument.spreadsheetml.sheet”)
c、 标题(“内容处置”、“附件;文件名=“+time.Now().UTC().Format”(“daily-alerts-20060102.xlsx”))
c、 数据(http.StatusOK,“应用程序/八位字节流”,文件内容)
但是,当与SES一起发送时,尽管CSV文件已正确送达,但6ko XLSX文件将变成10ko XLSX文件,并且无法使用Excel打开:

func(s*EmailSenderParams)SendEmailWithAttachment(内容字符串,数据*models.RawEmailData,附件[]字节,附件文件名字符串)错误{
sess,err:=session.NewSession(&aws.Config){
区域:aws.String(s.awsRegion)},
)
creds:=凭证。NewStaticCredentials(s.apid,s.apiKey,“”)
//创建SES会话。
svc:=ses.New(sess,&aws.Config{Credentials:creds})
//收集电子邮件。
buf:=新(字节.缓冲区)
writer:=多部分NewWriter(buf)
//电子邮件主标题:
h:=make(textproto.MIMEHeader)
//h、 设置(“从”,源)
h、 设置(“To”,data.ReceiverMail)
//h、 设置(“返回路径”,源)
h、 集合(“主题”,data.Subject)
h、 集合(“内容语言”、“en-US”)
h、 集合(“内容类型”,“多部分/混合;边界=\”“+编写器.边界()+”\“”)
h、 集合(“MIME版本”、“1.0”)
_,err=writer.CreatePart(h)
如果错误!=零{
返回错误
}
//正文:
h=make(textproto.MIMEHeader)
h、 设置(“内容传输编码”,“7bit”)
h、 集合(“内容类型”,“文本/普通;字符集=美国ascii”)
部件,错误:=writer.CreatePart(h)
如果错误!=零{
返回错误
}
_,err=part.Write([]字节(内容))
如果错误!=零{
返回错误
}
//文件附件:
h=make(textproto.MIMEHeader)
h、 设置(“内容处置”、“附件;文件名=“+attachmentFilename”)
h、 Set(“内容类型”,“应用程序/vnd.openxmlformats-officedocument.spreadsheetml.sheet;x-unix-mode=0644;名称=\”“+附件文件名+\”)
h、 设置(“内容传输编码”,“7bit”)
part,err=writer.CreatePart(h)
如果错误!=零{
返回错误
}
_,err=part.Write(附件)
如果错误!=零{
返回错误
}
err=writer.Close()
如果错误!=零{
返回错误
}
//收割台前的带边界线(不适用于当前边界线)
st:=buf.String()
如果strings.Count(st,“\n”)<2{
返回fmt.Errorf(“无效电子邮件内容”)
}
st=strings.SplitN(st,“\n”,2)[1]
原始:=ses.RawMessage{
数据:[]字节(st),
}
输入:=&ses.SendRawEmailInput{
目的地:[]*字符串{aws.string(data.ReceiverMail)},
来源:aws.String(s.senderEmail),
RawMessage:&raw,
}
//尝试发送电子邮件。
_,err=svc.sendrawmail(输入)
//如果出现错误,则显示错误消息。
如果错误!=零{
如果aerr,ok:=错误(awserr.Error);ok{
开关电源代码(){
案例ses.errCodeMessage被拒绝:
logrus.Warnln(ses.ErrCodeMessageRejected,aer.Error())
案例ses.ErrCodeMailFromDomainNotVerifiedException:
logrus.Warnln(ses.ErrCodeMailFromDomainNotVerifiedException,aerr.Error())
案例ses.ErrCodeConfigurationSetDoesNotExistException:
logrus.Warnln(ses.ErrCodeConfigurationSetDoesNotExistException,aer.Error())
违约:
logrus.Warnln(aer.Error())
}
}否则{
logrus.Warnln(err.Error())
}
logrus.Warnln(呃)
返回错误
}
logrus.Infoln(“SES电子邮件发送至“+data.ReceiverName+”,地址:“+data.ReceiverMail”)
归零
}
我认为MIMHEADERS、multipart或编码可能有问题,但我正在努力寻找问题所在。
您知道有什么成功的方法可以发送带有AWS SES的XLSX文件的电子邮件吗?

解决方案是对文件进行base64编码,并将
内容传输编码
标题设置为base64

h.Set(“内容传输编码”,“base64”)
part,err=writer.CreatePart(h)
如果出错!=零{
返回错误
}
b:=make([]字节,base64.StdEncoding.EncodedLen(len(附件)))
base64.StdEncoding.Encode(b,附件)
_,err=part.Write(b)