2017-10-20 6 views
0

OutlookでC#で送信される電子メールにファイルを添付しようとしています。
私は素晴らしい作品次の持っている:それは動作しますが、今の私のファイルは、プロジェクトがビルドされたときには存在しません静的フォルダ内にあるので、それは少しを吸うC#:リソースをOutlookメールアイテムへの添付ファイルとして追加する

using OutlookApp = Microsoft.Office.Interop.Outlook.Application; 
[...] 
public class Foo 
{ 
    private void SendMail() 
    { 
     OutlookApp outlookApp = new OutlookApp(); 
     MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); 
     [...] 
     var rootDirectory = System.Windows.Forms.Application.StartupPath; 
     Attachment myAttachment = mailItem.Attachments.Add(Path.Combine(rootDirectory, @"../../Assets/image.png")); 
     [...] 
     mailItem.Display(false); 
    } 
} 

を。だから私は、プロジェクトのリソースに私の画像を
を入れている:イメージは、Properties.Resources.imageを経由して利用できるようになりました。

using OutlookApp = Microsoft.Office.Interop.Outlook.Application; 
[...] 
public class Foo 
{ 
    private void SendMail() 
    { 
     OutlookApp outlookApp = new OutlookApp(); 
     MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); 
     [...] 
     var rootDirectory = System.Windows.Forms.Application.StartupPath; 
     Attachment myAttachment = mailItem.Attachments.Add(Properties.Resources.image); 
     [...] 
     mailItem.Display(false); 
    } 
} 

をしかし、それは動作しません:
単純に、私は次のことをやった

System.Runtime.InteropServices.COMException:「メンバーが見つかりません。 (HRESULTからの例外:0x80020003(DISP_E_MEMBERNOTFOUND)):

型:System.Objectの
アタッチメントのソース」

MSDNから、私はそのAttachments.Add方法の最初のパラメータに読み込ま。これはファイル(ファイル名を含む完全なファイルシステムパスで表される)または添付ファイルを構成するOutlookアイテムです。

問題は、私が理解しているように、添付ファイルをOutlookメールに追加するためにのみファイル名を提供できるということです。もう1つの選択肢はOutlookの添付ファイルを作成することですが、わかっていればそれは不可能です。それを行うための唯一の方法はで...ファイルmailItemの添付ファイルを追加しています。

  1. は私のアプローチは、添付ファイルを追加するには、正しいです:だから、私の質問は以下の通りです
    ?もしそうなら、私はどのようにしてリソースファイルのパスを取得できますか?
  2. このアプローチが良い場合は、Resources.resxファイル以外の場所でファイルを参照する方法がありますか?意味:私のアプリケーションでファイルパスが利用可能になり、プロジェクトをビルドするときにファイルが「エクスポート」されます。
  3. 私のアプローチが正しくない場合、どのようにしてMailItemに添付ファイルを適切に追加できますか?

ありがとうございます。

答えて

0

OK、最後に私の方法に適応しました。私は必要なすべてのイメージのビルドアクションで 、私は(これは、ファイルのプロパティ]タブで利用可能です)以下でした:

  • ビルドアクション:コンテンツ。
  • 出力先ディレクトリにコピー:新しい場合はコピーしてください。 build options

その方法は、ビルド時に、私のイメージ(と私の画像)を含むフォルダは、ビルドディレクトリにコピーされます。

Attachment myAttachment = mailItem.Attachments.Add(Path.GetFullPath("Assets/image.png")); 

それはそれを行うための唯一の方法だ場合、私は知りませんが、それは動作しますが、それは醜いいないようだと、私はまだXAMLで画像を使用することができます。私は、彼らの相対URLを使用することができます。画像がresxファイルに置かれている場合は、明らかにPITAです。

0

私の推測では、リソースは添付する項目として利用できません。代わりにどこかのコンピュータにイメージとしてリソースを保存して、作成したファイルを添付する方法はありますか?

このようなものが動作する可能性があります。

var bmp = new Bitmap(Properties.Resources.myimage); 

Attachment myAttachment = mailItem.Attachments.Add(bmp); 
+0

すでに存在していたオブジェクトに基づいて新しいオブジェクトをインスタンス化するのは問題ありません。 "コスト"はおそらく高価ではありませんが、原則として私はそれを好まなかったのです。それでも、あなたのソリューションは私の問題を別の角度から見るように私を押しました。 – benichka

関連する問題