Невозможно отправить письмо через 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;
  }

Gmail API: отправка сообщений

Проверьте первый пример кода.

Другие вопросы по тегам