Невозможно отправить письмо через gmail api нескольким отправителям
Мы используем новый API Gmail на iOS для отправки электронных писем, и все отлично работает для сообщений с одним получателем. Когда мы указываем более одного в поле "to", мы получаем следующую ошибку:
Error Domain=com.google.GTLJSONRPCErrorDomain Code=400 "The operation couldn’t be completed. (Invalid to header)
Я подтвердил, что отправляемое нами содержимое действительно является действительным сообщением rfc822.
4 ответа
У меня был обмен с командой Gmail, и они подтвердили, что это на самом деле ошибка с их API. Не уверен, когда это будет исправлено, поскольку они не предоставили больше деталей, но это на их радаре.
Я думаю, что вы можете сделать следующее
получить поля "Кому" в виде "test1@example.com, test2@example.com"
затем разделите его с помощью ','
String mail1 = "test1@example.com";
String mail2 = "test2@example.com";
тогда сделай это
email.addRecipient(javax.mail.Message.RecipientType.TO,
new InternetAddress(mail1));
email.addRecipient(javax.mail.Message.RecipientType.TO,
new InternetAddress(mail2));
Я проверил это сработало
Это была регрессия, но мы закончили развертывание исправления в понедельник, 2014-08-25.
Вы можете использовать электронные письма, разделенные запятыми, и просматривать их в цикле
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage email = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");
email.setFrom(new InternetAddress(from));
String to = "xyz@gmail.com,sjaksks@gmail.cm,hysrtt@gmail.com";
String[] split = to.split(",");
for(int i=0;i<split.length;i++) {
email.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(split[i]));
}
email.setSubject(subject);
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");
multiPart.addBodyPart(textPart);
multiPart.addBodyPart(htmlPart);
email.setContent(multiPart);
return email;
Вы должны использовать список в вашем поле.
Например:
[ "liz6beigle@hotmail.com",
"another.one@email.com" ]
Gmail имеет ограничение на количество отказов и получателей, которых вы можете отправлять одновременно.
Вы не можете хранить несколько электронных писем под одной строкой. Размещение одного адреса электронной почты в каждой строке обеспечит лучшую читаемость и предотвратит ошибки синтаксического анализа.
Вот пример кода на Java от Google. Я надеюсь, что это поможет другим понять:
/**
* Create a MimeMessage using the parameters provided.
*
* @param to Email address of the receiver.
* @param from Email address of the sender, the mailbox account.
* @param subject Subject of the email.
* @param bodyText Body text of the email.
* @return MimeMessage to be used to send email.
* @throws MessagingException
*/
public static MimeMessage createEmail(String to, String from, String subject,
String bodyText) throws MessagingException {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage email = new MimeMessage(session);
InternetAddress tAddress = new InternetAddress(to);
InternetAddress fAddress = new InternetAddress(from);
email.setFrom(new InternetAddress(from));
email.addRecipient(javax.mail.Message.RecipientType.TO,
new InternetAddress(to));
email.setSubject(subject);
email.setText(bodyText);
return email;
}
Проверьте первый пример кода.