2

こんにちは、私は自分のコードの何が問題なのかを理解するのにかなり近づいていると思いますが、誰かが私を助けてくれるか、正しい方向に向けてくれることを望んでいました. プログラムを実行でき、ユーザーがファイルをアップロードしようとしているページで、ファイルを選択するオプションが表示されます。しかし、送信を押すと、他の情報が送信されますが、ファイルは届きません。これは、ファイルをメールに送信するときにファイルを一時的に保存する場所がわからないためだと思います。現時点での私のコードは次のとおりです。

また、このコードの目的は、ユーザーがコメントしたり、スクリーン ショットを追加したりできる、私の Web サイトのコメント/リクエスト ページです。

private string SendMessage(string strTo, string strFrom, string strSubject, string    strMessage, string strAttachment, string strBCC)
{
    try
    {
        MailMessage mailMsg;
        string strEmail = "";
        string strSmtpClient = ConfigurationManager.AppSettings["SmtpClient"];
        string[] arrEmailAddress = strTo.Split(';');
        for (int intCtr = 0; intCtr < arrEmailAddress.Length; intCtr++)
        {
            strEmail = "";
            if (arrEmailAddress[intCtr].ToString().Trim() != "")
            {
                strEmail = arrEmailAddress[intCtr].ToString().Trim();
                mailMsg = new MailMessage(strFrom, strEmail, strSubject, strMessage);
                mailMsg.IsBodyHtml = true;
                if (!strBCC.Trim().Equals(string.Empty))
                    mailMsg.Bcc.Add(strBCC);

                SmtpClient smtpClient = new SmtpClient(strSmtpClient);
                smtpClient.UseDefaultCredentials = true;
                smtpClient.Port = 25;

                smtpClient.Send(mailMsg);
                mailMsg.Dispose();
            }
        }
        return "Message sent to " + strTo + " at " + DateTime.Now.ToString() + ".";
    }
    catch (Exception objEx)
    {
        return objEx.Message.ToString();
    }

    string strUpLoadDateTime = System.DateTime.Now.ToString("yyyyMMddHHmmss");
    string strFileName1 = string.Empty;
    if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0))
    {
        string strUploadFileName1 = File1.PostedFile.FileName;
        strFileName1 = strUpLoadDateTime + "." + Path.GetFileNameWithoutExtension(strUploadFileName1) + Path.GetExtension(strUploadFileName1);
        strFileName1 = strFileName1.Replace("'", "");
        string strSaveLocation = Server.MapPath("") + "\\" + strFileName1;
        File1.PostedFile.SaveAs(strSaveLocation);
        txtComments.Text = "The file has been uploaded";
    }

私の質問は、このコードのどこにファイルを保存する場所をどこに置くべきかということです。

コードの以下の部分は、送信時に電子メールをフォーマットするために使用しているものです。メールで送信する内容を選択します。

protected void Submit_Click1(object sender, EventArgs e)
{
    try
    {
        string dandt = System.DateTime.Now.ToString("yyyyMMddHHmmss");
        string strMessage = "Bug Name: " + txtBugName.Text.Trim() + "<br/>" +
                     "Module Name: " + ddlModule.SelectedValue + "<br/>" +
                     "Page Name: " + ddlPage.SelectedValue + "<br/>" +
                     "Description: " + txtComments.Text.Trim() + "<br/>" +
                      File1.f + "<br/>" +
                      "Email is" + " " + txtemail.Text.Trim() + "<br/>" +
                      "The request was sent at" + dandt;  

        SendMessage(ConfigurationManager.AppSettings["EmailAddrTo"],
            ConfigurationManager.AppSettings["EmailAddrFrom"],
            txtBugName.Text.Trim(),
            strMessage, "", "");
    }
    catch 
    {
    }
}

何らかの理由で、送信を押してもメールが送信されません。また、メールが送信された日時をメールに入れる方法を理解しようとしていました。明らかに私のメールにはこの情報が含まれていますが、何らかの理由でメールが遅れた場合に備えて、ユーザーが送信ボタンを押した日時を知りたいです。コードのこの部分で File.F と書かれている場所は、添付ファイルを電子メールに送信する方法を見つけようとしていた場所ですが、コードでどの構文を使用する必要があるかわかりません。

4

2 に答える 2

2

送信している電子メールに、ユーザーのコンピュータからファイルを添付しようとしているようです。その場合は、電話をかける前にまずファイルをアップロードする必要がありますSendMessage.

最初にSubmit_Click行う必要があるのは、ファイルをどこかにアップロードするコードです。また、あなたのメッセージが無効になっていると思われる場所を削除してくださいFile1.fstrMessage

ファイルをアップロードしたら、strSavedLocationファイルを保存したファイルの場所である をSendMessage()メソッドに渡します。

SendMessageメソッドでは、次のコードを使用してファイルを添付できますMailMessagestrAttachmentアップロードしたファイルへのパス名です。

var attachment = new Attachment(strAttachment);
// Add time stamp information for the file.
ContentDisposition disposition = attachment.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(strAttachment);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(strAttachment);
disposition.ReadDate = System.IO.File.GetLastAccessTime(strAttachment);
mailMsg.Attachments.Add(attachment);
于 2012-07-12T14:48:14.120 に答える
0

ここには、便利な System.Net.Mail.Attachment を除いた主要な部分があるように見えます。

これを行う場合、ファイル アップロード処理コードを Submit_Click ハンドラーに移動し、次に Mail.Attachment コードを追加します。

    private string SendMessage(string strTo, string strFrom, string strSubject, string strMessage, string strAttachment, string strBCC)
    {
        try
        {
            System.Net.Mail.MailMessage mailMsg;
            string strEmail = "";
            string strSmtpClient = ConfigurationManager.AppSettings["SmtpClient"];
            string[] arrEmailAddress = strTo.Split(';');
            for (int intCtr = 0; intCtr < arrEmailAddress.Length; intCtr++)
            {
                strEmail = "";
                if (arrEmailAddress[intCtr].ToString().Trim() != "")
                {
                    strEmail = arrEmailAddress[intCtr].ToString().Trim();
                    mailMsg = new MailMessage(strFrom, strEmail, strSubject, strMessage);
                    mailMsg.IsBodyHtml = true;
                    if (!strBCC.Trim().Equals(string.Empty))
                        mailMsg.Bcc.Add(strBCC);

                    /*** Added mail attachment handling ***/    
                    System.Net.Mail.Attachment attachment;
                    attachment = new System.Net.Mail.Attachment(strAttachment);
                    mailMsg.Attachments.Add(attachment);

                    SmtpClient smtpClient = new SmtpClient(strSmtpClient);
                    smtpClient.UseDefaultCredentials = true;
                    smtpClient.Port = 25;

                    smtpClient.Send(mailMsg);
                    mailMsg.Dispose();
                }
            }
            return "Message sent to " + strTo + " at " + DateTime.Now.ToString() + ".";
        }
        catch (Exception objEx)
        {
            return objEx.Message.ToString();
        }
    }

    protected void Submit_Click1(object sender, EventArgs e)
    {
        try
        {
            /*** Moved from SendMessage function ****/
            string strUpLoadDateTime = System.DateTime.Now.ToString("yyyyMMddHHmmss");
            string strFileName1 = string.Empty;
            if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0))
            {
                string strUploadFileName1 = File1.PostedFile.FileName;
                strFileName1 = strUpLoadDateTime + "." + Path.GetFileNameWithoutExtension(strUploadFileName1) + Path.GetExtension(strUploadFileName1);
                strFileName1 = strFileName1.Replace("'", "");
                string strSaveLocation = Server.MapPath("") + "\\" + strFileName1;
                File1.PostedFile.SaveAs(strSaveLocation);
                txtComments.Text = "The file has been uploaded";
            }

            string dandt = System.DateTime.Now.ToString("yyyyMMddHHmmss");
            string strMessage = "Bug Name: " + txtBugName.Text.Trim() + "<br/>" +
                         "Module Name: " + ddlModule.SelectedValue + "<br/>" +
                         "Page Name: " + ddlPage.SelectedValue + "<br/>" +
                         "Description: " + txtComments.Text.Trim() + "<br/>" +
                          strSaveLocation + "<br/>" +
                          "Email is" + " " + txtemail.Text.Trim() + "<br/>" +
                          "The request was sent at" + dandt;


            SendMessage(ConfigurationManager.AppSettings["EmailAddrTo"],
                ConfigurationManager.AppSettings["EmailAddrFrom"],
                txtBugName.Text.Trim(),
                strMessage, strSaveLocation, "");
        }
        catch
        {
        }
    }

StringBuilder の使用に関する注意事項については、同意します。次のように使用します。

System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.AppendFormat("Bug Name: {0}<br/>", txtBugName.Text.Trim());
sb.AppendFormat("Module Name: {0}<br/>", ddlModule.SelectedValue);       

追加するために編集: また、ContentDisposition の使用に関する上記の Brad の回答も参照してください。

于 2012-07-12T15:05:28.637 に答える