2009-04-24 13 views
6

これまでは、添付ファイル付きのC++アプリケーションからMAPISendMailを使用してOutlook(または必要なMAPI電子メールアプリケーション)を起動しました。 (Microsoft WordのSend Email機能と同様)。C#からメールアプリケーションを起動する(添付ファイル付き)

私はC#アプリケーションから同等の機能を実行し、XP、Vista、Server 2008(およびWindows 7)で動作させる必要があります。

MAPISendMailは、Outlookが稼働しMAPIがマネージコードでサポートされていない場合、常にMAPI_ E_FAILUREを返すため、Vista/2008の下位にはありません。 この修正を確認した後でさえ、 http://support.microsoft.com/kb/939718 私はそれを確実に動作させることはできません。

私はMicrosoft Word &を知っています.Adobe Reader 9は、Vista上で添付ファイルとともにOutlookを起動できます。

C#互換のソリューションが望ましいですが、私は動作するもの(MAPIを使用する必要はありません)に満足しています。私は現在の "解決策"が何であるかを見出すことができない。スタックオーバーフローに関する既存の回答のどれもこれをカバーしていないようです。

編集:

私は認識してMAPIだとC#が一緒に動作しませんので、私は管理者として実行しているC/C++ Vistaで機能するソリューションおよびServer 2008のませがかかります。動作する例として、Adobe Reader 9 & Microsoft Wordを参照してください。指摘したように、それはmailto URL specの一部ではないとして、これは、すべてのクライアント上で動作しない場合があります

+0

私はあなたに良いニュースがありません。この投稿は、.netでMAPIまたはCDOを使用しないでください:http://blogs.msdn.com/mstehle/archive/2007/10/03/fyi-why-are-mapi-and- cdo-1-21-not-supported-in-managed-net-code.aspx – JMarsch

+0

@JMarsch、それ以前に読んでください。私がこの質問で触れたように、私は非.NET答えがうまくいけば満足しています。 VistaやServer 2008の下では、MAPISendMailがAT ALLの仕事をすることはできません。 – Steven

+0

実際に添付ファイル付きのメールを送信したいのですか?あるいは、エンドユーザーは実際にこれをOutlookで開いておく必要がありますか? – PeteT

答えて

5

私たちは正常にVSTOを使用してこれを行いました。

ここでは、Outlook 2007でVISTAを実行しているいくつかの行のスニペットを示します(コードはVB.netにあります)。

outlookオブジェクトに対して特定の処理を実行すると、セキュリティロックが使用されることに注意してください。 (セキュリティ上のリスクとしてマークされたアドレス、ボディおよびその他のプロパティ)。私たちは、このセキュリティを回避するために第三者コンポーネント(Redemption)を使用しています。あなたが何らかのセキュリティマネージャを使用しないと、Outlookは外部の何かがアクセスしようとしているポップアップを少し出すでしょうし、一定の時間内にそのアクセス権を与えることができます。

Outlookインターフェイスのインポート。

Imports Outlook = Microsoft.Office.Interop.Outlook 

この例は、完全な実際の例ではなく、ある方向性を示すことを目的としています。

dim MailItem As Microsoft.Office.Interop.Outlook.MailItem 

' Lets initialize outlook object ' 
MailItem = OutlookSession.Application.CreateItem(Outlook.OlItemType.olMailItem) 
MailItem.To = mailto 

MailItem.Subject = communication.Subject 
MailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML 
MailItem.HTMLBody = htmlBody 

MailItem.Attachments.Add(filename, Outlook.OlAttachmentType.olByValue) 

' If True is supplied to Display it will act as modal and is executed sequential. ' 
SafeMail.Display(True) 

上記の例ではOutlookSessionは、このプロパティから来ている:

Public ReadOnly Property OutlookSession() As Outlook.NameSpace 
     Get 
      If Not OutlookApplication Is Nothing Then 
       Return OutlookApplication.GetNamespace ("MAPI") 
      Else 
       Return Nothing 
      End If 
     End Get 
    End Property 

あなたはそれがこのために内部でMAPIを使用している見ることができるように。

幸いです。

+0

アクティブなアンチウィルスプログラムを実行している場合、Vista上のOutlook 2007では、Outlookのセキュリティプロンプトが表示されません。 – CoderDennis

+0

私はこれをテストし、それがうまくいくかどうかを確認します。 – Steven

1

ビットlowtech方法が、mailtoのをハンドラを使用して、あなたはこの

System.Diagnostics.Process.Start("mailto:[email protected]?subject=hello&attachment=c:\\chicken.xls"); 

を行うことができます。最も重要なのは(私の世界では少なくとも)Outlook 2007はそれをサポートしていないが、古いバージョンはそれをサポートしている。

+3

残念ながら添付ファイルはmailto経由では動作しません。 – Steven

+0

@Steven、使用方法はメールクライアントによって異なります。 Outlook 2007はそれをサポートしていませんが、古いバージョンはサポートしています。 –

+0

@スティーブン、私はそれが反映された答えを更新しました。 –

1

Outlookで電子メールを開く必要があるのか​​、C#の添付ファイルで電子メールを送信するだけでよいのか分かりません。私はあなたが見通しでオープンに書いたことを知っていますが、これを行う唯一の方法であると仮定しているかもしれません。添付ファイル付きのメールを送信したいだけなら、以下のようにすることができます。

#using System.Net.Mail; 

SmtpClient smtpClient = new SmtpClient(host, port); 

MailMessage message = new MailMessage(from, to, subject, body); 
Attachment attachment = new Attachment(@"H:\attachment.jpg"); 
message.Attachments.Add(attachment); 

System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(username, password); 
smtpClient.UseDefaultCredentials = false; 
smtpClient.Credentials = SMTPUserInfo; 
smtpClient.Send(message); 

電子メールサーバーによっては、認証ビットなしで行うこともできます。

0

Outlookで電子メールを送信するコード。セキュリティに関する警告は発生しません。

var outlook = new ApplicationClass(); 
MailItem mailItem = (MailItem)outlook.Session.Application.CreateItem(Outlook.OlItemType.olMailItem); 

mailItem.Display(false); 
2

単に電子メールでプロパティを設定し、それらを読んでいない限り、上記のようにVBでは償還する必要はありません。ここでは、添付ファイル付きでOutlookを介して電子メールを表示/送信するための単純なVB関数があります。 (このコードはMicrosoft Outlook 12.0 Object Library、たとえば "C:¥Program Files¥Microsoft Office¥Office12¥MSOUTL.OLB"を参照しています)。

Sub DoMail() 
    Set objOL = CreateObject("Outlook.Application") 
    Set objNewMail = objOL.CreateItem(olMailItem) 

    Dim filename As String 
    filename = "C:\\temp\\example.txt" 

    With objNewMail 
     .To = "[email protected]_me_not.com" 
     .Subject = "test" 
     .Body = "Test Body" 
     .Attachments.Add filename, Outlook.OlAttachmentType.olByValue 
    End With 

    objNewMail.Display 

    'objNewMail.Send 
End Sub 
+0

コメントがもう1つあります。 Visual C++で作業している場合、MFCには、MAPIを使用して添付されたドキュメントを電子メールで送信する方法があります。このメソッドはCDocument :: OnFileSendMail()です。このコードは、MAPI経由で独自の「添付ファイル付き電子メールを送信」を作成するのにも簡単に対応できます。 –

関連する問題