Невозможно отправить электронную почту через gmail api нескольким отправителям

Мы используем новый API Gmail на iOS для отправки электронных писем, и все отлично работает для сообщений с одним получателем. Когда мы указываем более одного в поле «Кому», мы получаем следующую ошибку:

Error Domain=com.google.GTLJSONRPCErrorDomain Code=400 "The operation couldn’t be completed. (Invalid to header)

Я проверил, что контент, который мы отправляем, на самом деле является допустимым сообщением rfc822.


person yellowandy    schedule 20.08.2014    source источник
comment
Получение той же ошибки только с использованием клиента python   -  person Chris Watts    schedule 21.08.2014
comment
Можете ли вы включить код, который на самом деле вызывает ошибку? Версия iOS, вероятно, тоже будет полезна. Попробуйте подготовить это, а затем отредактируйте свой вопрос.   -  person LeonH    schedule 21.08.2014
comment
Версия iOS и пример кода не имеют отношения к этому вопросу, пожалуйста, не троллите. Как я уже упоминал, мы проверили, что сообщение rfc822, отправленное через gmail API, действительно, но приводит к ошибке, когда указано более одного получателя. Это так просто.   -  person yellowandy    schedule 21.08.2014
comment
У меня такая же проблема с созданием черновиков с помощью API С#. Один получатель работает нормально, несколько получателей выдают сообщение об ошибке Invalid to header.   -  person David Libido    schedule 25.08.2014
comment
Ответил здесь: stackoverflow.com/ вопросы/25437820/   -  person Eric D    schedule 25.08.2014


Ответы (5)


Вы должны использовать список в поле to.

E.g. :

[ "[email protected]",
  "[email protected]" ]

В 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: отправка сообщений

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

person Lord Bafford    schedule 22.08.2014
comment
Спасибо за вашу помощь, но вы ошибаетесь в утверждении, что вы не можете указать несколько адресов в строке. Если вы посмотрите на RFC 822, вы увидите, что это фактически рекомендуемый подход для указания нескольких получателей. - person yellowandy; 25.08.2014

Это был регресс, но мы завершили развертывание исправления в понедельник, 25 августа 2014 г.

person Eric D    schedule 28.08.2014

Я думаю, вы можете сделать следующее

получить поля «Кому» как «[email protected], [email protected]»

затем разделите его с помощью ','

String mail1 = "[email protected]";
String mail2 = "[email protected]";

тогда сделай это

email.addRecipient(javax.mail.Message.RecipientType.TO,
                   new InternetAddress(mail1));
email.addRecipient(javax.mail.Message.RecipientType.TO,
                   new InternetAddress(mail2));

Я проверил это, это сработало

person Pradeep    schedule 29.09.2014
comment
Вопрос касается iOS, поэтому ответ Java мало чем поможет. - person konus; 29.09.2014
comment
это поможет мне, так как я использую Java, так что спасибо! хотя я знаю, что это было направлено на пользователей IOS - person JenniferG; 26.02.2016

Вы можете использовать электронные письма, разделенные запятыми, и циклически просматривать эти электронные письма.

    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 = "[email protected],[email protected],[email protected]";
    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;
person MD AFSAR ALI    schedule 18.12.2019

У меня был обмен с командой gmail, и они подтвердили, что это действительно ошибка их API. Не уверен, когда это будет исправлено, поскольку они не предоставили никаких подробностей, но это находится на их радаре.

person yellowandy    schedule 25.08.2014