2017-01-20 3 views
2

Я использую «google.golang.org/api/gmail/v1» в «Перейти», чтобы отправить несколько писем с содержимым HTML. Я использую цикл for для отправки нескольких писем с другим контентом, но все типа «html».gmail-api: форматы содержимого почты искажаются (код Lang: Go)

Что касается API, то он работает нормально, и все письма доставляются. Но только первая почта поставляется с правильным форматом, то есть в HTML (т. Е. Получатель почты получает почту в формате HTML), а остальные пользователи получают почту со всем содержимым как ТЕКСТ (так что все HTML теги видны в теле письма)/

Есть ли какие-либо ограничения или условия, которые мне нужно обрабатывать, чтобы добиться успеха?

Просьба указать на ошибку, которую я делаю.

Фрагмент кода:

func main() { 
// Get the data from the DB 
recipientsList := dbRetrieval() 
fmt.Println("About to call the method") 

// Invoke the Loop for all the recipients 
for indx := range recipientsList { 
    time.Sleep(time.Second * 10) 
    fmt.Println("The 3 second wait :", indx) 
    tokenValueToBeUsed := requestRefreshToken(recipientsList[indx]) 
    if len(tokenValueToBeUsed) == 0 { 
     err_uid := updateIsDeleted(recipientsList[indx].UserId) 
     if err_uid { 
      fmt.Println("Zero refresh token , so updated the DELETE") 
     } else { 
      fmt.Println("Zero refresh token But couldnt update the DELETE ") 
     } 
    } else { 
     secret, err := ioutil.ReadFile("client_secret.json") 
     if err != nil { 
      log.Printf("Error: %v", err) 
     } else { 
      conf, err := google.ConfigFromJSON(secret, gmail.GmailSendScope) 
      if err != nil { 
       log.Printf("Error: %v", err) 
      } else { 
       var tok oauth2.Token 
       tok.AccessToken = tokenValueToBeUsed 
       token := &tok 
       client := conf.Client(oauth2.NoContext, token) 
       gmailService, err := gmail.New(client) 
       if err != nil { 
        log.Printf("Error: %v", err) 
       } else { 
        var message gmail.Message 

        // For HTML 
        header := make(map[string]string) 
        header["From"] = recipientsList[indx].From_Mail 
        header["To"] = recipientsList[indx].To_Mail 
        header["Subject"] = recipientsList[indx].Title + "\r\n\r\n" + recipientsList[indx].Body + "\r\n\r\n" + recipientsList[indx].Signature + "\r\n\r\n" + recipientsList[indx].Pixel 
        header["MIME-Version"] = "1.0" 
        header["Content-Type"] = "text/html; charset=\"utf-8\"" 
        header["Content-Transfer-Encoding"] = "base64" 
        var msg string 
        for k, v := range header { 
         msg += fmt.Sprintf("%s: %s\r\n", k, v) 
        } 
        message.Raw = base64.URLEncoding.EncodeToString([]byte(msg)) 

        // Send the message 
        _, err_gms := gmailService.Users.Messages.Send("me", &message).Do() 
        if err_gms != nil { 
         log.Printf("Error: %v", err_gms) 
        } else { 

         err_upd := updateStatus(recipientsList[indx].UUID) 
         if err_upd { 
          fmt.Println("Message sent!") 
          //fmt.Println("The GMAIL response Object Details", gmailResponse) 
         } else { 
          fmt.Println("Message sent! But user not updated") 
         } 

        } 
       } 

      } 

     } 

    } 

} 

}

ответ

0

Я не могу гарантировать, что, но кажется, что вы можете иметь проблемы с электронной почтой поля заказ, потому что с map порядка является случайным каждый раз. Попробуйте заменить map на что-то вроде:

header := [][]string{ 
    {"To", recipientsList[indx].To_Mail}, 
    {"From", recipientsList[indx].From_Mail}, 
    {"MIME-Version", "1.0"}, 
    {"Content-Type", "text/html; charset=utf-8"}, 
    {"Content-Transfer-Encoding", "base64"}, 
    {"Subject", recipientsList[indx].Title + "\r\n\r\n" + recipientsList[indx].Body + "\r\n\r\n" + recipientsList[indx].Signature + "\r\n\r\n" + recipientsList[indx].Pixel}, 
} 
var msg string 
for _, v := range header { 
    msg += fmt.Sprintf("%s: %s\r\n", v[0], v[1]) 
} 
+0

О, круто, отлично. Думаю, в этом и проблема. Позвольте мне попробовать и подтвердить вам. Благодарю. – Mudit

+0

Привет, Роман, не проблема. Он изображает одно и то же поведение. – Mudit

+0

@Mudit вы можете опубликовать свой 'msg' после конкатенации для первого и второго сообщений? –

Смежные вопросы