0

我正在开发一个 Windows 应用程序,我需要在其中通过电子邮件将一些文件作为附件发送。

代码

public string SendMail(string mFrom,
        string mPass,
        string mTo,
        string mSub,
        string mMsg,
        string mFile,
        bool isDel)
    {
        string sql = "";
        try
        {
            System.Net.Mail.MailAddress mailfrom = new System.Net.Mail.MailAddress(mFrom);
            System.Net.Mail.MailAddress mailto = new System.Net.Mail.MailAddress(mTo);
            System.Net.Mail.MailMessage newmsg = new System.Net.Mail.MailMessage(mailfrom, mailto);
            newmsg.IsBodyHtml = false;
            if (mFile.Length > 2
                && File.Exists(mFile))
            {
                System.Net.Mail.Attachment att = new System.Net.Mail.Attachment(mFile);
                newmsg.Attachments.Add(att);
            }
            newmsg.Subject = mSub;
            newmsg.Body = mMsg;
            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587);
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new System.Net.NetworkCredential(mFrom, mPass);
            smtp.EnableSsl = true;
            smtp.Send(newmsg);
            newmsg.Dispose();
            GC.Collect();
            sql = "OK";
            if (isDel
                && File.Exists(mFile))
            {
                File.Delete(mFile);
            }
        }
        catch (Exception ex)
        {
            sql = ex.Message;
        }
        return sql;
    }

此代码适用于小文件。但我需要发送高达 1-2 GB 的大文件。为此该怎么办。

4

2 回答 2

5

您不能使用电子邮件来获取这些文件,这与您的代码无关。

我认为没有任何提供商会支持发送这种大小的文件,更不用说接收它们了。甚至 G-Mail 也有 25 Mb 的限制,这已经相当大了。

电子邮件不是执行此操作的正确渠道。

所以问题不会出现在您的代码中,提供者会限制附件的大小,并在您向它们提供更大的文件时拒绝它们。您将在 FROM 地址收到一封电子邮件,说明文件太大,您的电子邮件未通过。

要以最简单的形式执行此操作,请查看 FTP。

于 2013-05-22T06:35:27.950 回答
2

我同意 Gerald Versluis 的观点,即电子邮件不是处理此问题的正确渠道。即使您使用自己的可配置电子邮件服务器,也可能存在一些内部限制,阻止它发送如此大的文件。

我会为此使用 FTP,但如果您真的想继续使用电子邮件,我建议您先检查以下内容。

  • 服务器上是否有连接超时属性?如果是,请尝试将其增加到 3 小时或类似的时间。
  • 邮件服务器上是否有足够的空间?
  • 您的电子邮件服务器是否有一些文档?是否有关于附件大小的其他详细信息?
于 2013-05-22T08:57:56.573 回答