System.Net.Mail - попытка отправить письмо с вложением в gmail, работает, но только для небольших вложений - PullRequest
6 голосов
/ 15 июля 2010

Я использую этот класс для отправки почты через учетную запись Gmail:

public class GmailAccount
    {
        public string Username;
        public string Password;
        public string DisplayName;

        public string Address
        {
            get
            {
                return Username + "@gmail.com";
            }
        }

        private SmtpClient client;

        public GmailAccount(string username, string password, string displayName = null)
        {
            Username = username;
            Password = password;
            DisplayName = displayName;

            client = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential(Address, password)
            };
        }

        public void SendMessage(string targetAddress, string subject, string body, params string[] files)
        {
            MailMessage message = new MailMessage(new MailAddress(Address, DisplayName), new MailAddress(targetAddress))
            {
                Subject = subject,
                Body = body
            };

            foreach (string file in files)
            {
                Attachment attachment = new Attachment(file);
                message.Attachments.Add(attachment);
            }

            client.Send(message);
        }
    }

Вот пример того, как я его использую:

GmailAccount acc = new GmailAccount("zippoxer", "******", "Moshe");
acc.SendMessage("zippoxer@gmail.com", "Hello Self!", "like in the title...", "C:\\822d14ah857.r");

Последний параметр в методе SendMessage - это местоположение вложения, которое я хочу добавить.

Я пытался отправить письмо с вложением 400 КБ, отлично работал (даже 900 КБ работает). Но затем я попытался загрузить вложение размером 4 МБ, но ничего не вышло. Пробовал 22MB -> тоже не сработало.

В Gmail должно быть ограничение 25 МБ на сообщение. Тема и тело моего сообщения почти пусты, поэтому не рассматривайте их как часть размера сообщения. Почему у меня такой низкий лимит?

Ответы [ 4 ]

5 голосов
/ 15 июля 2010

Согласно этому посту, это ошибка в .Net 4.0. Ограничение, указанное в сообщении, составляет 3 050 417 байт. Вы можете попробовать обходной код, включенный в пост. Надеюсь, это поможет.

http://connect.microsoft.com/VisualStudio/feedback/details/544562/cannot-send-e-mails-with-large-attachments-system-net-mail-smtpclient-system-net-mail-mailmessage

1 голос
/ 15 июля 2010

Все еще можно отправить. Просто измените кодировку вложения на что-то отличное от Base64. Я попытался проверить это и обнаружил, что в кодировке Base64 есть IndexOutOfBoundsException. Мне удалось успешно отправить мне файл размером 11 МБ, используя TransferEncoding.SevenBit.

0 голосов
/ 15 июля 2010

Хорошо, это ошибка в .net 4. Microsoft говорит, что она будет исправлена ​​в следующем пакете обновления.

0 голосов
/ 15 июля 2010

Проверьте и посмотрите, выходит ли объект SmtpClient из области видимости или иным образом удаляется до завершения отправки и отправки запроса QUIT на сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...