2016-06-17 2 views
1

Я пишу регистрационную форму с использованием GoLang 1.5. У меня все работает, но я заметил, что если я попытаюсь зарегистрироваться с помощью электронной почты со знаком плюса ([email protected]), я получаю следующую ошибку:GoLang net/smtp sendMail для получателя со знаками плюс

Сделка не выполнена: Незаконная точка с запятой, а не в группе

Googling для этого не принес много результатов, и похоже, что Go должен отлично обрабатывать знак плюса.

import (
    "net/smtp" 
    "net/mail" 
) 

func sendEmail(t *Email) bool { 
    to := []string{"[email protected]"} 
    err = smtp.SendMail(smtp_url, auth, from_email, to, buff.Bytes()) 
    if err != nil { 
     log.Fatal(err) 
     // outputs: Transaction failed: Illegal semicolon, not in group 
    } 
} 

Я ценю любые советы, которые я получаю от этого.

Спасибо!

+1

Эта ошибка не исходит из вашего кода, какой сервер вы отправляете? – JimB

+0

Использует AWS SES. – noahtkeller

+1

Это не проблема с Go. Можете ли вы убедиться, что ваши заголовки правильно отформатированы в сообщении электронной почты? – JimB

ответ

1

Я смог воспроизвести эту ошибку тогда и только тогда, когда в заголовке сообщения был полутолд в заголовке To. Например .:

msg := []byte("To: [email protected];[email protected]ample.com\r\nSubject: foo\r\n\r\nbody\r\n") 

Перепроверьте To заголовок вы посылаете и убедитесь, что он использует запятые вместо запятой для разделения нескольких получателей.

+0

Извините, мне потребовалось некоторое время, чтобы ответить, мое внимание было отстранено от этого до сих пор. Это был правильный ответ. Я передавал шаблон электронной почты с пакетом html/template вместо пакета text/template. Это преобразовало знак + в электронном письме в \t unicode +, что привело к ошибке. Использование пакета text/template исправило эту проблему. Благодаря! – noahtkeller

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