如何在 Swift 5 中在 AWS-SES 上创建 RAW-Email-Message
How to create RAW-Email-Message on AWS-SES in Swift 5
我想在我的 iOS-App 中创建一个 RAW-Email。
展望 documentation,
我需要将我的消息编码为 MIME 标准,但我对这个主题不太熟悉。在文档中还有 python 和 java.
的示例代码
如何在 SWIFT 中实现此目的?
func sendRawMail(){
let sender = "sender@mail.com"
let recipient = "recipient@mail.com"
let rawMessage = AWSSESRawMessage()
// rawMessage?.data = "I guess HERE I have to put the MIME- Data?!"
let rawRequest = AWSSESSendRawEmailRequest()
rawRequest?.destinations = [recipient]
rawRequest?.source = sender
rawRequest?.rawMessage = rawMessage
AWSSES.default().sendRawEmail(rawRequest!) { (response, error) in
if let response = response{
print(response)
}
if let error = error{
print(error)
}
}
}
到目前为止,使用我的代码发送一封空邮件是有效的。
经过大量阅读,我终于让它工作了。
您需要根据 MIME 标准编写一个大字符串。
您必须将这个大字符串编码为 BASE64。
还需要从数据转换为 BASE64 字符串的附件。
我会 post 我的代码,它可以发送带有 .png 图像的邮件。其他的文件类型我也会测试,但是必须是一样的原理。
首先我为我的文件类型创建了一个枚举。
enum DataTypes{
case png
case jpg
case pdf
}
现在我创建了一个函数来获取特定数据类型的字符串值
func getMIMEDataType(dataType:DataTypes) -> String{
var MIMEData = String()
switch dataType {
case .png:
MIMEData = "image/png"
case .jpg:
MIMEData = "image/jpg"
case .pdf:
MIMEData = "application/pdf"
}
return MIMEData
}
终于实现了发送原始邮件的功能。消息字符串中已经有变量,所以你可以灵活地使用这个函数。
func sendRawMail(sender:String,reciepients:[String],subject:String,message:String,attachment:Data?,dataType:DataTypes?,attachmentName:String?,completion: @escaping (_ messageCode:String?,_ error:Error?) -> ()){
let attachmentString = attachment!.base64EncodedString(options: .lineLength64Characters)
let MIMEDataType = getMIMEDataType(dataType: dataType!)
let message:String = """
Subject: \(subject)
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="XXXXboundary text"
This is a multipart message in MIME format.
--XXXXboundary text
Content-Type: text/plain
\(message)
--XXXXboundary text
Content-Type: \(MIMEDataType);
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="\(attachmentName!).\(MIMEDataType.components(separatedBy: "/")[1])"
\(attachmentString)
--XXXXboundary text--
"""
let data = message.data(using: .utf8)
let rawMessage = AWSSESRawMessage()
rawMessage?.data = data
let rawRequest = AWSSESSendRawEmailRequest()
rawRequest?.destinations = reciepients
rawRequest?.source = sender
rawRequest?.rawMessage = rawMessage
AWSSES.default().sendRawEmail(rawRequest!) { (response, error) in
if let response = response{
completion(response.messageId,nil)
}
if let error = error{
completion(nil,error)
}
}
}
你可以这样使用它并且可以在completionHandler中处理结果。
sendRawMail(sender: "sender.mail@mail.com", reciepients: ["recipient.mail@mail.com"], subject: "This is a test", message: "TestMessage", attachment: attachment.data, dataType: .png, attachmentName: "testpicture") { (messageID, error) in
if let messageID = messageID{
print(messageID)
}
if let error = error{
print(error)
}
我希望它能对以后的人有所帮助:)
我想在我的 iOS-App 中创建一个 RAW-Email。 展望 documentation, 我需要将我的消息编码为 MIME 标准,但我对这个主题不太熟悉。在文档中还有 python 和 java.
的示例代码如何在 SWIFT 中实现此目的?
func sendRawMail(){
let sender = "sender@mail.com"
let recipient = "recipient@mail.com"
let rawMessage = AWSSESRawMessage()
// rawMessage?.data = "I guess HERE I have to put the MIME- Data?!"
let rawRequest = AWSSESSendRawEmailRequest()
rawRequest?.destinations = [recipient]
rawRequest?.source = sender
rawRequest?.rawMessage = rawMessage
AWSSES.default().sendRawEmail(rawRequest!) { (response, error) in
if let response = response{
print(response)
}
if let error = error{
print(error)
}
}
}
到目前为止,使用我的代码发送一封空邮件是有效的。
经过大量阅读,我终于让它工作了。 您需要根据 MIME 标准编写一个大字符串。 您必须将这个大字符串编码为 BASE64。 还需要从数据转换为 BASE64 字符串的附件。
我会 post 我的代码,它可以发送带有 .png 图像的邮件。其他的文件类型我也会测试,但是必须是一样的原理。
首先我为我的文件类型创建了一个枚举。
enum DataTypes{
case png
case jpg
case pdf
}
现在我创建了一个函数来获取特定数据类型的字符串值
func getMIMEDataType(dataType:DataTypes) -> String{
var MIMEData = String()
switch dataType {
case .png:
MIMEData = "image/png"
case .jpg:
MIMEData = "image/jpg"
case .pdf:
MIMEData = "application/pdf"
}
return MIMEData
}
终于实现了发送原始邮件的功能。消息字符串中已经有变量,所以你可以灵活地使用这个函数。
func sendRawMail(sender:String,reciepients:[String],subject:String,message:String,attachment:Data?,dataType:DataTypes?,attachmentName:String?,completion: @escaping (_ messageCode:String?,_ error:Error?) -> ()){
let attachmentString = attachment!.base64EncodedString(options: .lineLength64Characters)
let MIMEDataType = getMIMEDataType(dataType: dataType!)
let message:String = """
Subject: \(subject)
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="XXXXboundary text"
This is a multipart message in MIME format.
--XXXXboundary text
Content-Type: text/plain
\(message)
--XXXXboundary text
Content-Type: \(MIMEDataType);
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="\(attachmentName!).\(MIMEDataType.components(separatedBy: "/")[1])"
\(attachmentString)
--XXXXboundary text--
"""
let data = message.data(using: .utf8)
let rawMessage = AWSSESRawMessage()
rawMessage?.data = data
let rawRequest = AWSSESSendRawEmailRequest()
rawRequest?.destinations = reciepients
rawRequest?.source = sender
rawRequest?.rawMessage = rawMessage
AWSSES.default().sendRawEmail(rawRequest!) { (response, error) in
if let response = response{
completion(response.messageId,nil)
}
if let error = error{
completion(nil,error)
}
}
}
你可以这样使用它并且可以在completionHandler中处理结果。
sendRawMail(sender: "sender.mail@mail.com", reciepients: ["recipient.mail@mail.com"], subject: "This is a test", message: "TestMessage", attachment: attachment.data, dataType: .png, attachmentName: "testpicture") { (messageID, error) in
if let messageID = messageID{
print(messageID)
}
if let error = error{
print(error)
}
我希望它能对以后的人有所帮助:)