Получить вложение из gmail с помощью Content-Disposition без «filename», но с «name» и без attachmentId - PullRequest
0 голосов
/ 07 марта 2019

Обновлен вопрос, новая информация, проблема в другом макете сообщения.

Для приложения я использую Gmail API, который успешно извлекает вложения из Gmail API, код, используемый из Google Developers . Но некоторые сообщения отличаются от остальных тем, что не содержат html-сообщения (сообщение также закодировано в base64), а «теги» вложения отличаются:

Это работает, API может найти вложение:

--000000000000ff7fdb05837ee23d--
--000000000000ff7fe105837ee241
Content-Type: application/pdf; name="inv20190275.PDF"
Content-Disposition: attachment; filename="inv20190275.PDF"
Content-Transfer-Encoding: base64
Content-ID: <16957c99f59399ae79b1>
X-Attachment-Id: 16957c99f59399ae79b1

Для этого вложение не может быть найдено (первые строки могут содержать строки перед этими):

----boundary_141_b8719500-62b8-4b0e-9018-36676671a768--

----boundary_140_e2c718ec-c2f4-40e5-a244-18917f7e1c5c--

----boundary_142_795676fe-01cb-4744-ac4f-c90f6a4e8843
Content-Type: multipart/mixed;
    boundary="--boundary_143_6415c656-2b4b-4837-9481-ada707bbdb52"

----boundary_143_6415c656-2b4b-4837-9481-ada707bbdb52
Content-Type: application/octet-stream; name="3317608.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment

Код, который я использую:

private void SaveAttachment(Message email)
{   
    Message message = service.Users.Messages.Get(mailadres, email.Id).Execute();
    IList<MessagePart> parts = message.Payload.Parts;

    foreach (MessagePart part in parts)
    {
        //For every email I get an empty messagebox (if no attachment found).
        MessageBox.Show("attachmentId: " + part.Body.AttachmentId);  

        if (!string.IsNullOrEmpty(part.Filename))
        {
            //No attachment found, so no messagebox here.
            MessageBox.Show("filename: " + part.Filename);

            string attId = part.Body.AttachmentId;
        }
    }
}

Как я могу заставить свой код повторно распознавать тот факт, что вложение хранится в другой части сообщения? Где, как кажется, он не хранится в Message.Payload.Parts.

Старый вопрос:

Для приложения я использую Gmail API, который успешно извлекает вложения из Gmail API, код, используемый из Google Developers . Но по неизвестной причине API утверждает, что в некоторых случаях в Gmail нет вложений, в которых они видны и открыты. Код гласит:

  • Строка AttachmentId пуста ("")
  • part.Filename строка также пуста

Мой код:

private void SaveAttachment(Message email)
{   
    Message message = service.Users.Messages.Get(mailadres, email.Id).Execute();
    IList<MessagePart> parts = message.Payload.Parts;

    foreach (MessagePart part in parts)
    {
        //For every email I get an empty messagebox (if no attachment found).
        MessageBox.Show("attachmentId: " + part.Body.AttachmentId);  

        if (!string.IsNullOrEmpty(part.Filename))
        {
            //No attachment found, so no messagebox here.
            MessageBox.Show("filename: " + part.Filename);

            string attId = part.Body.AttachmentId;
        }
    }
}

Письма выглядят как обычные письма. Некоторые отправлены "flowmailer.net", некоторые просто обычными адресами электронной почты.

Я не нашел подобных проблем в сети, и я не знаю, где искать причину проблемы .. Это ошибка или я что-то сделал не так / не полностью?

...