私は非常に特別な要件があります。私のWebアプリケーションでは、データベース値と電子メール本文からPDF請求書を生成する必要があります。私は簡単にこれを完璧に動作するSMTPを使用して送信することができます。asp.netアプリで電子メールに自動生成されたpdfを添付する
しかし、問題は、システムが常に完璧であることに頼ることができないということです。これは請求書です。したがって、SMTPを使用する代わりにデフォルトのメールクライアントを開く必要があります。今、私は次のコードを持っています
//Code to create the script for email
string emailJS = "";
emailJS += "window.open('mailto:[email protected]?body=Test Mail" + "&attachment=" + emailAttachment + "');";
//Register the script for post back
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true);
これは電子メールを完全に開きますが、添付ファイルは機能していません。パスは/Web/Temp/123.pdf
とする。
私は以下のような通常のURLと同じパスを使用すると、新しいウィンドウでファイルを適切に開きます。
ClientScript.RegisterStartupScript(this.GetType(), "newWindow", "window.open('/Web/Temp/123.pdf');", true);
ファイルは存在しますが、サーバー上に存在します。一方、Outlookはクライアントマシン上で開きます。だから、私はC:\Web\Temp\123.pdf
のように完全に決定されたパスを使用することはできません。私が試してみると、フォルダ自体が存在しない可能性があるクライアントマシン上のファイルを見つけようとします。
私はここで何ができるのか把握しようとしています。別の方法があるなら、私は試してみるべきです。
P.S.いいえ、メールを直接送信することはできません。それは、私の将来の地獄の問題をさらに引き起こします。
編集: また、奇妙な問題が見つかりました。添付ファイルのファイルパスに二重引用符を追加すると、\が自動的に追加されます。 @"&attachment=""" + Server.MapPath(emailAttachment) + @"""');"
は私に&attachment=\"C:\Web\Temp\123.pdf\"
という出力を与えます。
私はその二重引用符をエスケープしようとしていて、何とかそのスラッシュを追加しています。私はこれがまったく別の問題だと知っていますが、新しい質問を作成するのではなく、ここで言及すべきだと思いました。
編集: 私はlocalhostで固定パスを試しました。だから、私は基本的にファイルが格納されている同じマシン上でアプリをテストしています。それでも、全くアタッチメントはありません。
string emailJS = "";
emailJS += @"window.open('mailto:[email protected]?body=Test Mail" + emailAttachment + @"&attachment=";
emailJS += @"""D:\Dev\CSMS\CSMSWeb\Temp\635966781817446275.Pdf""');";
//emailJS += Server.MapPath(emailAttachment) + @"');";
//Register the script for post back
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true);
パスが正しく設定されていることを確認してください。今、それはちょうどcommand line argument not valid
と言うエラーをスローします。
編集:
他に方法がありますか?私はサーバー側にファイルパスを持っています。たぶん私はクライアントマシン上のいくつかの既定のフォルダに自動的にファイルをダウンロードしそこから開くことができますか?それは可能ですか?
編集:もう1つのオプションを試しました。
emailJS += @"mailto:[email protected]?body=Test Mail" + @"&attachment=";
emailJS += @"\\localhost\CSMSWeb\Temp\635966781817446275.Pdf";
//emailJS += Server.MapPath(emailAttachment) + @"');";
Process.Start(emailJS);
Process.Start
ラインは機能しますが、何もしません。開始するプロセスはなく、エラーもありません。
編集: yay。私は最終的に、デフォルトのメールクライアントを開く代わりに、別のフォームを使用して件名と本文を表示することをユーザーに承認させました。しかし、私はまだこの問題を解決することを好むだろう。
はあり意図あなたが取り組んでいるこのインターネットアプリケーションは?そうであれば、いくつかの制限を加えて行うことができます。それ以外の場合はできません。 – Andrei
はい、イントラネットアプリケーションです。 – jitendragarg