我使用此课程通过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 方法中的最后一个参数是我要添加的附件的位置。
我尝试发送附件为400KB的邮件,工作得很好(甚至900KB工作)。但后来我尝试上传4MB的附件,没用。尝试了22MB - >也没用。
Gmail中每封邮件的限制应为25MB。我的消息的主题和正文几乎是空的,所以不要将它们视为消息大小的一部分。为什么我有这个下限?
答案 0 :(得分:5)
根据这篇文章,它是.Net 4.0中的一个错误。帖子中指定的限制是3,050,417字节。您可以尝试帖子中包含的解决方法。希望这会有所帮助。
答案 1 :(得分:1)
仍然可以发送。只需将附件编码更改为Base64以外的其他编码即可。我尝试对此进行测试,发现Base64编码代码中有IndexOutOfBoundsException
。我能够使用TransferEncoding.SevenBit
成功向自己发送一个11MB的文件。
答案 2 :(得分:0)
在发送完成之前检查并查看SmtpClient对象是否超出范围或以其他方式处置,并将QUIT发送到服务器。
答案 3 :(得分:0)
好的,这是.net 4中的一个错误。 微软称它将在下一个服务包中修复。