1

私は、送信者が彼の電子メールIDとパスワードをテキスト送信し、添付ファイルを選択するための1つのフォームを持っています

fileuploadを使用して、データベーステーブルから取得している受信者の電子メールIDを使用すると、電子メールは受信者に正常に届きます。

問題は、添付ファイルを添付すると、最初の電子メールIDを除いて添付ファイルのサイズが0になることです

、テーブルから取得しています....コードを貼り付けました。

foreach (string email_to in list_emails)
{
    MailMessage mail = new MailMessage();
    mail.To.Add(email_to);
    mail.Subject = "UPDATES FROM ATTENDANCE S/W";
    mail.From = new MailAddress(txtFrom.Text.ToString());
    mail.Body = txtMessage.Text;
    if (FileUpload1.HasFile)
    {
        string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
        Attachment myAttachment =
                           new Attachment(FileUpload1.FileContent, fileName);
        mail.Attachments.Add(myAttachment);
    }
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.UseDefaultCredentials = false;
    smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text.ToString(), txtPasswd.Text.ToString());
    smtp.EnableSsl = true;
    smtp.Send(mail);
}
4

1 に答える 1

2

これは が でFileContentあるために起こっているのでStream、そこから読み取ると の位置がStream最後に残されます。このようなことを考えてみてください。Streamループの先頭でバイトを格納します。とにかく、バイトを読み続ける必要はありません。

bool hasFile = FileUpload1.HasFile;

int fileLen = FileUpload1.PostedFile.ContentLength;
Stream stream = FileUpload1.FileContent;

byte[] file = new byte[fileLen];
stream.Read(file, 0, fileLen);

そして、ループ内で、変数を活用します。

new Attachment(new MemoryStream(file) ...

ifステートメントを変更して、以下を活用する必要がありますbool

if (hasFile)
于 2013-03-22T11:39:41.180 に答える