Я использую этот класс, чтобы отправить почтовой канавке учетную запись 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 МБ, не работал. Испытанные 22 МБ-> не работали также.
Должен быть предел 25 МБ за сообщение в Gmail. Предмет и тело моего сообщения почти пусты, так не рассматривайте их как часть размера сообщения. Почему у меня есть тот низкий предел?
Согласно этому сообщению, это ошибка в .Net 4.0. Ограничение, указанное в сообщении, составляет 3,050,417 байт. Вы можете попробовать код обходного пути, включенный в сообщение. Надеюсь, это поможет.
Проверьте и посмотрите, выходит ли объект SmtpClient за пределы области действия или иным образом удаляется, прежде чем отправка будет завершена и отправил QUIT на сервер.
Хорошо, это ошибка в .net 4. Microsoft заявляет, что это будет исправлено в следующем пакете обновления.
Отправить по-прежнему можно. Просто измените кодировку прикрепленных файлов на другую, кроме Base64. Я попытался проверить это и обнаружил, что в коде кодировки Base64 есть исключение IndexOutOfBoundsException
. Мне удалось успешно отправить себе файл размером 11 МБ с помощью TransferEncoding.SevenBit
.