Ios 使用Gmail API发送带有附件的电子邮件

Ios 使用Gmail API发送带有附件的电子邮件,ios,swift,gmail-api,Ios,Swift,Gmail Api,我正在尝试使用Gmail API发送和发送带有附件的电子邮件。我目前的进展: class func generateRawString(to: NSMutableArray, subject: String, body: String) -> String { let dateFormatter:NSDateFormatter = NSDateFormatter() dateFormatter.dateFormat = "EEE, dd MMM yyyy

我正在尝试使用Gmail API发送和发送带有附件的电子邮件。我目前的进展:

class func generateRawString(to: NSMutableArray, subject: String, body: String) -> String {

        let dateFormatter:NSDateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss Z"; //RFC2822-Format
        let todayString:String = dateFormatter.stringFromDate(NSDate())

        let userDefaults = NSUserDefaults.standardUserDefaults()
        let mailLoggedUser = userDefaults.objectForKey("email") as! String
        let username = userDefaults.objectForKey("userName") as! String
        let rawMessage = "" +
            "Date: \(todayString)\r\n" +
            "From: \(username)<\(mailLoggedUser)>\r\n" +
            "To: \(self.generateRecipientsToMail(to))\r\n" +
            "Subject: \(subject)\r\n\r\n" +
            body
        return GTLEncodeWebSafeBase64(rawMessage.dataUsingEncoding(NSUTF8StringEncoding))
    }

class func sendEmail(to: NSMutableArray, isRecursive:Bool, subject: String, body: String, threadId: String, attachmentBase64: String, completionBlock:(Bool, AnyObject?)->()) {

        let gtlMessage = GTLGmailMessage()
        gtlMessage.raw = self.generateRawString(to, subject: subject, body: body)

        let encodeDataString = attachmentBase64.dataUsingEncoding(NSUTF8StringEncoding)
        let upParam = GTLUploadParameters(data: encodeDataString!, MIMEType: "message/rfc822")

        if threadId.length > 0 {
            gtlMessage.threadId = threadId
        }

        let appd = UIApplication.sharedApplication().delegate as! AppDelegate
        let query = GTLQueryGmail.queryForUsersMessagesSendWithUploadParameters(upParam)
        query.message = gtlMessage

        appd.service.executeQuery(query, completionHandler: { (ticket, response, error) -> Void in
            print("ticket ==> \(ticket)")
            print("response ==>\(response)")
            print("error ==> \(error)")
        })
    }
我找不到一种方法使其工作,甚至尝试使用:

您可以模拟第一个源:)获取base64中的文件数据,并将其添加到代码中的
rawMessage
。然后,只需像现在一样发送原始消息,而不编码整个消息(因为您的内容类型是
message/rfc822
)@Tholle我已经尝试过了,但电子邮件是纯文本的。您可以模仿第一个源:)在base64中获取文件数据,并将其添加到代码中的
rawMessage
。然后像现在一样发送原始消息,而不编码整个消息(因为您的内容类型是
message/rfc822
)@Tholle我已经尝试过了,但是电子邮件是纯文本的
GTLServiceTicket 0x7fbb7e2cee00: {
  service:<GTLServiceGmail: 0x7fbb7be1b8d0>
  authorizer:GTMOAuth2Authentication 0x7fbb7becf9a0:
    {
      accessToken="ya29.cALoWT-_-iDvILabLWbpP-eQk4rmbSKgbKhc7E4wOBUc51zzxjE3MZ1mV_cZ1zx3EaAY3A", refreshToken="1/5HWoZDNt5bA415zp_T_VcDfR9vWfvSrEo0u3_5O01MhIgOrJDtdun6zK6XiATCKT", 
      code="4/qB7vLAajswouGzjmMfAJg0CKaiUZbr_-SBzOYjh0ans", 
      expirationDate="2016-01-20 20:18:08 +0000"
    }
    fetcher:GTMHTTPUploadFetcher 0x7fbb7e2aa2c0 (https://www.googleapis.com/upload/rpc?uploadType=resumable&prettyPrint=false&upload_id=AEnB2Up6Z7T3bOCZDYD9g9v6oN9dzOozKLFSLoGUL6qTjoB4izNbrJi__ULCtKce_EvEbpKJ0P_w-iSh0mJRMcxLDyhdF_8DRg)
}
GTLGmailMessage 0x7fbb7e077a30: {id:"15264d6492cedfa5" threadId:"15264d6492cedfa5" labelIds:[1]}