3

プログラム内から Outlook メッセージを生成しようとしています。ビルドしてプログラム内から送信するか、ビルドして保存することができます。ビルドしてから表示して、ユーザーが AD リストから受信者を手動で選択できるようにしたいと考えています。 ... 以下のコードは、ここのサンプルと他のチュートリアル サイトを混同したものですが、下書きを保存したり、プログラム内から送信したりせずにメールをビルドして「表示」することはできません...

また、メール IE 内に UNC リンクを作成する方法を探しています。ユーザー フォルダ \\unc\path\%USERNAME% などへのパスを書き出します。

private void sendEmailOutlook(string savedLocation, string packageName)
    {
        try
        {
            Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();
            Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

            oMsg.HTMLBody = "Attached is the required setup files for your <i><b>soemthing</i></b> deployment package.";
            oMsg.HTMLBody += "\nPlease save this file to your network user folder located.<br /><br/>\\\\UNC\\data\\users\\%USER%\\";
            oMsg.HTMLBody += "\nOnce saved please boot your Virtual machine, locate and execute the file at <br /> <br />\\\\UNC\\users\\%USER%\\";

            int pos = (int)oMsg.Body.Length +1;
            int attachType = (int)Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue;

            Microsoft.Office.Interop.Outlook.Attachment oAttach = oMsg.Attachments.Add(savedLocation, attachType, pos, packageName);

            oMsg.Subject = "something deployment package instructions";
            oMsg.Save();

        }
        catch(Exception ex)
        {
            Console.WriteLine("Email Failed", ex.Message);
        }
4

1 に答える 1

4
Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

oMsg.Subject = "something deployment package instructions";
oMsg.BodyFormat = OlBodyFormat.olFormatHTML;
oMsg.HTMLBody = //Here comes your body;
oMsg.Display(false); //In order to display it in modal inspector change the argument to true

使用できるフォルダーへのリンクについて(ユーザー名がわかっている場合):

<a href="C:\Users\*UserName*">Link</a>

多くの企業では、従業員のユーザー名がアドレス エントリに添付されています (「John Doe(Jdoe)」のように表示され、Jdoe はユーザー名です)。ユーザーが受信者を選択するか、メールを送信しようとすると、それらのイベントをキャッチして、次のようなことを行うことができます

foreach (Outlook.Recipient r in oMsg.Recipients)
{
    string username = getUserName(r.Name);//  or r.AddressEntry.Name instead of r.Name
    oMsg.HTMLBody += "<a href='C:\\Users\\" + username  + "'>Link</a>"
}
oMsg.Save();
oMsg.Send();

wheregetUserName()は、userName のみを抽出するメソッドです (部分文字列または正規表現を使用できます)。

  • メールの本文が有効な HTML であることを確認してください
  • /n は、<br>insted を使用する必要がある新しい行を提供しません。
于 2013-10-03T04:33:52.620 に答える