をあなたが言ったけれども:
コードは、クライアント上で実行する必要があります
は、サーバー上でそれを行うことは可能かつ有効である、あなたは投稿の要件を与えられました。あなたがサーバー上でそれをしてはならない理由が他にもあるなら、教えてください。あなたは、サーバー上の添付ファイルへのアクセス権を持っている場合は
は、あなたは、あなたのサーバー上のSystem.Net.Mail.MailMessage
オブジェクトを生成し、添付ファイルを追加し、ユーザーへのダウンロードを経由してファイルを渡すことができます。 (少しトリッキーが、可能な解決策については下記を参照)、このの
唯一の欠点ではなく、即座にメールプログラムの開口部の、ユーザーが積極的にダウンロードしたメールファイルを開くために持っていること、です。
これは(あなたがc#を使用していると仮定して)あなたはバイト配列にはMailMessageを変換することができる方法である:
public static byte[] ToEml(this MailMessage message)
{
var assembly = typeof(SmtpClient).Assembly;
var mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
using (var memoryStream = new MemoryStream())
{
// Get reflection info for MailWriter contructor
var mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
// Construct MailWriter object with our FileStream
var mailWriter = mailWriterContructor.Invoke(new object[] { memoryStream });
// Get reflection info for Send() method on MailMessage
var sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);
// Call method passing in MailWriter
sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true, true }, null);
// Finally get reflection info for Close() method on our MailWriter
var closeMethod = mailWriter.GetType().GetMethod("Close", BindingFlags.Instance | BindingFlags.NonPublic);
// Call close method
closeMethod.Invoke(mailWriter, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { }, null);
return memoryStream.ToArray();
}
}
(hereを発見)
、その後、このバイトを返すコントローラのアクションを構築ファイル結果としての-array:
var result =
new FileContentResult(messageBytes, "application/vnd.ms-outlook")
{
FileDownloadName = "WhateverDownloadNameYouNeed.eml"
};
Outlookを使用していない場合は、コンテンツタイプを変更する必要があります。
それを開くためにダウンロードしたファイルをクリックすると、うーん...、一瞬、私はいただきました携帯電話で、それと住むことができると言うましょ? iPhone、AndroidでWebアプリケーションを使用したいのですが? MailToはデバイス上で正常に動作しますが、Outlookはありません... – rimes
残念ながら私は私の解決策でそれを達成する可能性はありません。もちろん、Outlookに現在設定されているコンテンツタイプを、お使いのデバイスに応じて別のものに変更できます。しかし悲しいことに、私はその分野で経験のある人ではなく、モバイルデバイスがそのファイルをどのように処理するか、たとえば、Google Mailアプリケーションで.emlファイルを開く可能性がないかどうかはわかりません。 –