-1

最大3つの添付ファイルを含む電子メールを送信することになっているアプリケーションを作成しています。

これは非常に単純なWebフォームであり、可能な添付ファイルを参照するための3つのFileUploadコントロールがあります。

アプリケーションはWebファームにデプロイされ、もちろんサーバー側で実行されます。

メールを送信させることができましたが、添付ファイルに問題があります。現在、私はこの手順を使用してファイルを添付しています。

                if (fuAttatchment.HasFile)
                {                        
                    fuAttatchment.SaveAs(Server.MapPath(fuAttatchment.FileName));
                    MyMessage.Attachments.Add(new System.Net.Mail.Attachment(Server.MapPath(fuAttatchment.FileName))); 

                    filesize += fuAttatchment.PostedFile.ContentLength;
                }

送信すると発生するエラーは次のとおりです。

送信の失敗:System.UnauthorizedAccessException:パス'E:\ Inetpub \ IS \ MSTicketRequest\wallpaper-3010.jpg'へのアクセスが拒否されました。System.IO .__ Error.WinIOError(Int32 errorCode、String mayFullPath)at System.IO.FileStream.Init(String path、FileMode mode、FileAccess access、Int32 rights、Boolean useRights、FileShare share、Int32 bufferSize、FileOptions options、SECURITY_ATTRIBUTES secAttrs 、String msgPath、Boolean bFromProxy、Boolean useLongPath)at System.IO.FileStream..ctor(String path、FileMode mode、FileAccess access、FileShare share、Int32 bufferSize、FileOptions options、String msgPath、Boolean bFromProxy)at System.IO.FileStream ..ctor(String path、FileMode mode)at System.Web.HttpPostedFile.SaveAs(String filename)at System.Web.UI.WebControls.FileUpload.SaveAs(String filename)atMSTicketRequest.WebForm1。

なぜこれが起こるのか理解できませんでした。おそらく、セキュリティポリシーなどに関する何かが欠けています。

よろしくお願いします!

4

4 に答える 4

2

これの代わりに:

fuAttatchment.SaveAs(Server.MapPath(fuAttatchment.FileName));
                    MyMessage.Attachments.Add(new System.Net.Mail.Attachment(Server.MapPath(fuAttatchment.FileName))); 

これを行う:

fuAttatchment.SaveAs("somewhere local"+fuAttatchment.FileName);
                    MyMessage.Attachments.Add(new System.Net.Mail.Attachment("somewhere local"+fuAttatchment.FileName)); 

添付ファイルをサーバーに保存する必要はありません。

于 2012-10-04T22:21:05.803 に答える
1

サイトを実行しているユーザーには、ターゲット ファイル パスへの書き込みアクセス権がないようです。ディレクトリのセキュリティ権限を確認し、IIS ユーザーに書き込みアクセス権があることを確認してください。

于 2012-10-04T21:46:28.663 に答える
0

アプリケーションプールのタイプによって異なります。しかし、それが networkservice の場合は、networkservice を追加する必要があります。
ApplicationPoolIdentity の IIS_Users ですが、これについてはわかりません。 http://www.windowsecurity.com/articles/understanding-windows-ntfs-permissions.html

それでも解決しない場合は、読み取り専用オプションを削除してみてください。

于 2012-10-04T21:57:52.507 に答える
0

gmail アカウント経由でメールを送信します。これを行う方法は次のとおりです(役立つかどうかはわかりません)。1. 添付ファイルをアップロードするテキストボックスが必要です。2. 「参照」ボタンと「OpenFileDialog1」ボタン。「参照」ボタンにこれを入れます

private void btnBrowse_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            txt_attachment.Text = openFileDialog1.FileName;
        }
    }

これを配置する「添付ファイル付きで送信」ボタンが必要です。

MailMessage mail = new MailMessage(txt_gmail.Text, txt_to.Text, txt_subject.Text, txt_body.Text);
        mail.Attachments.Add(new Attachment(txt_attachment.Text));
        SmtpClient client = new SmtpClient(txt_server.Text);
        client.Port = 587;
        client.Credentials = new System.Net.NetworkCredential(txt_gmail.Text, txt_password.Text);
        client.EnableSsl = true;
        client.Send(mail);
        MessageBox.Show("Mail sent", "Succes", MessageBoxButtons.OK);
        foreach (Control control in this.Controls)
        {
            TextBox box = control as TextBox;
            if (box != null)
            {
                box.Text = "";
            }
        }
    }

最後に (これを行うといくつかのエラーが表示されるため)、Gmail.dll ファイルを作成する必要があります。これを行うためのリンクは次のとおりです。ここでGmail.dllを作成できます

これが役立つことを願っています。

于 2013-07-22T07:30:46.357 に答える