How send Email using Gmail api in swift

前端 未结 4 1954
一个人的身影
一个人的身影 2021-01-03 08:15

The Gmail Api has no clear documentation on how to do this, I have been trying with this but there are many things that are in the air.

I have sought external source

4条回答
  •  春和景丽
    2021-01-03 08:59

    According to Google API documentation(https://developers.google.com/gmail/api/guides/sending), we can know there are have two ways can help you send message success(draft.send, message.send). without a doubt, both of them use api are different, but the result is the same. As you give one of the above way can got that, we just call it message.send. With another way is draft.send, so we should upload "UploadParameters" to Gmail draft, after we upload success, we can get some message about gmail draft. At last, we should send mail content, when we send success, the draft message will automatic delete. Code goes be as follows:

    func postEmailMessageRequest(model: MEMailMessageModel, request: CompletionRequest) {
    
            let uploadParameters = GTLUploadParameters()
            uploadParameters.data = model.snippet.dataUsingEncoding(NSUTF8StringEncoding)
            uploadParameters.MIMEType = model.mimeType!
    
            let query = GTLQueryGmail.queryForUsersDraftsCreateWithUploadParameters(uploadParameters) as! GTLQueryProtocol!
            service.executeQuery(query) { (ticket : GTLServiceTicket!, messages : AnyObject!, error : NSError?) -> Void in
                if error == nil {
                    let messages = (messages as! GTLGmailDraft)
                    messages.message.threadId = model.threadID
                    self.sendMailRequest(messages, model: model, request: request)
                } else {
                    request(status: false, result: "upload success")
                }
            }
        }
    
        func sendMailRequest(draft: GTLGmailDraft, model: MEMailMessageModel, request: CompletionRequest) {
    
            let query = GTLQueryGmail.queryForUsersDraftsSendWithUploadParameters(nil) as! GTLQueryGmail
            draft.message.raw = self.generateRawString(model)
            query.draft = draft
    
            self.service.executeQuery(query, completionHandler: { (ticket, response, error) -> Void in
                if error == nil {
                    request(status: true, result: "send success") // after this, the draft will be delete
                } else {
                    request(status: false, result: "send failure")
                }
            })
        }
    
        func generateRawString(model: MEMailMessageModel) -> String {
            let date = MEMailMessagelFormatUtil.coverDateFromDate(NSDate(), dateFormat: "EEE, dd MMM yyyy HH:mm:ss Z")! // get current date
    
            var fromEamil = ""
            if let str = NSUserDefaults.standardUserDefaults().valueForKey("userEmail") as? String {
                fromEamil = str
            }
    
            var rawMessage = ""
            if model.isReply { // how to reply, but how to reply the email is another question.
                rawMessage = "" + "In-Reply-To: \(model.messageID!)\r\n"
                if let references = model.references {
                    rawMessage += "References: \(references) \(model.messageID!)\r\n"
                } else {
                    rawMessage += "References: \(model.messageID!)\r\n"
                }
            }
    
            rawMessage += "Date: \(date)\r\n" +
                "From: <\(fromEamil)>\r\n" +
                "To: \(model.toName!) <\(model.toMail)>\r\n" +
                "Subject: \(model.subject) \r\n\r\n" + "\(model.snippet)"
    
            return GTLEncodeWebSafeBase64(rawMessage.dataUsingEncoding(NSUTF8StringEncoding))
        }
    

提交回复
热议问题