1

画像が埋め込まれたメールの送信に問題があります。ワードエディターを使用していくつかの解決策を試しましたが、状況を解決できません。クライアントが望んでいないので、私は SmtpClient を使用できません。彼には交換があり、送信済みフォルダーにメールを送信する必要があります。

たとえば、html形式でメールを送信したい。ヘッダーの画像 - ロゴとフッターの画像 - サイン。

HTML テンプレートを文字列としてデータベースに保存し、メールの外観と目的を増やしました。送信時に置き換えられる変数を使用して挿入する特定のデータ。

mailitem.wordeditor を使用せず、インスペクターを表示する必要なく、データベースに保存されている画像を電子メールに追加する方法を知っている人はいますか? 画像がすでにディスク上にあるか、何らかの方法で使用されているストリームであると仮定しましょう?

私のアプリケーションは、別のウィンドウでユーザーに通知せずにバックグラウンドで送信する必要があります。wordeditor を使用して画像を追加するには、インスペクターを表示する必要があります。そして、すぐに閉じても点滅します。

2 番目の問題は、mailitem の HTMLBody プロパティをフォーマットする方法です。通常の HTML は受け付けず、いわゆる html のみを受け付けます。彼らの単語htmlを勉強することは本当に必要ですか?

最初に MailMessage を使用しましたが、このテンプレートは画像や代替ビューでも機能しました。MailMessage を使用して Outlook 経由で送信する可能性があるかもしれませんが、私はそれを知りません。

anoyneはそれに出くわしましたか?

    public void SendEmailViaOutlook()
    {
        //in template I mostly need to use table and css to divide email into blocks - header, content, footer

        String htmlTemplate = "<html>\n";
        htmlTemplate += "  <head>\n";
        htmlTemplate += "    <style type=\"text//css\">\n";
        htmlTemplate += "       #Header  {border-width: 1; border: solid; text-align: center}\n";
        htmlTemplate += "       #Content {border-width: 1; border: solid; text-align: center}\n";
        htmlTemplate += "       #Footer   {border-width: 1; border: solid; text-align: center}\n";
        htmlTemplate += "    </style>\n";
        htmlTemplate += "  </head>\n";
        htmlTemplate += "  <body>\n";
        htmlTemplate += "    <table>\n";
        htmlTemplate += "      <tr><td><img src=\"cid:companylogo\"/></td></tr>\n";
        htmlTemplate += "      <tr><td><div id=\"Header\">$HEADER$</div></td></tr>\n";
        htmlTemplate += "      <tr><td><div id=\"Contentr\">$CONTENT$</div></td></tr>\n";
        htmlTemplate += "      <tr><td><div id=\"Footer\">$FOOTER$</div></td></tr>\n";
        htmlTemplate += "      <tr><td><img src=\"cid:usersign\"/></td></tr>\n";
        htmlTemplate += "    </table>\n";
        htmlTemplate += "  </body>n";
        htmlTemplate += "</html>\n";

        //the code is simplified to demostrate problem
        //$CONTENT etc. will be replaced by another html from custom html wysiwyg editor

        try
        {
            Outlook.Application outlook = new Outlook.Application();
            Outlook._MailItem outLookMailMessage = outlook.CreateItem(Outlook.OlItemType.olMailItem) as Outlook._MailItem;
            outLookMailMessage.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;

            /*

            here a I have problem to set the property - my template is not
            set and a blank email is sent - almost none html it takes except the example from msdn http://support.microsoft.com/kb/310262, are there some rules how to write it?

            */

            outLookMailMessage.HTMLBody = htmlTemplate;
            outLookMailMessage.Subject = this.Subject;

            outLookMailMessage.Recipients.Add("somenone@somewhere.com");

            /*
             here I woud need somehow link 2 images with cid companylogo and usersign
             */

            outLookMailMessage.Send();
            outLookMailMessage = null;
        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

どんな助けでも大歓迎です!

4

4 に答える 4

2

oulookで画像を送信するためのコードは次のとおりです

Configuration config = System.Web.Configuration.WebConfigurationManager
    .OpenWebConfiguration(HttpContext.Request.ApplicationPath);
var settings = (System.Net.Configuration.MailSettingsSectionGroup)
    config.GetSectionGroup("system.net/mailSettings");
var smtp = settings.Smtp;
System.Net.Configuration.SmtpNetworkElement network = smtp.Network;
var outlookApp = new Microsoft.Office.Interop.Outlook.Application();
var mailItem = (MailItem)outlookApp.CreateItem(OlItemType.olMailItem);
mailItem.To = network.TargetName;

Attachment attachment = mailItem.Attachments.Add
    ( "C://test.bmp"
    , OlAttachmentType.olEmbeddeditem
    , null
    , "test image"
    );

string imageCid = "test.bmp@123";

attachment.PropertyAccessor.SetProperty
    ( "http://schemas.microsoft.com/mapi/proptag/0x3712001E"
    , imageCid
    );

mailItem.BodyFormat = OlBodyFormat.olFormatRichText;
mailItem.HTMLBody = String.Format
     ( "<body><img src=\"cid:{0}\"></body>"
     , imageCid
     );

mailItem.Importance = OlImportance.olImportanceNormal;
mailItem.Display(false);

<mailSettings>
      <smtp from="test@gmail.com">
        <network host="hostname" port="portrnumber" 
            userName="domain/username" password="password" 
            targetName="targetname@gmail.com"/>
      </smtp>
</mailSettings>
于 2012-11-08T07:46:21.263 に答える
0

ここに示すよう にSmtpClientを使用してみましたか?

System.Net.Mail.Attachment inline = new System.Net.Mail.Attachment(@"imagepath\filename.png");
inline.ContentDisposition.Inline = true;
于 2012-07-31T09:03:36.637 に答える
0
  public void SendEmailViaOutlook()
    {
        String htmlTemplate = "<html>\n";
        htmlTemplate += "  <head>\n";
        htmlTemplate += "    <style type=\"text//css\">\n";
        htmlTemplate += "       #Header  {border-width: 1; border: solid; text-align: center}\n";
        htmlTemplate += "       #Content {border-width: 1; border: solid; text-align: center}\n";
        htmlTemplate += "       #Footer   {border-width: 1; border: solid; text-align: center}\n";
        htmlTemplate += "    </style>\n";
        htmlTemplate += "  </head>\n";
        htmlTemplate += "  <body>\n";
        htmlTemplate += "    <table>\n";
        htmlTemplate += "      <tr><td><img src=\"cid:companylogo.jpg@embed\"/></td></tr>\n";
        htmlTemplate += "      <tr><td><div id=\"Header\">$HEADER$</div></td></tr>\n";
        htmlTemplate += "      <tr><td><div id=\"Contentr\">$CONTENT$</div></td></tr>\n";
        htmlTemplate += "      <tr><td><div id=\"Footer\">$FOOTER$</div></td></tr>\n";
        htmlTemplate += "      <tr><td><img src=\"cid:usersign.jpg@embed\"/></td></tr>\n";
        htmlTemplate += "    </table>\n";
        htmlTemplate += "  </body>n";
        htmlTemplate += "</html>\n";

        //the code is simplified to demostrate problem
        //$CONTENT etc. will be replaced by another html from custom html wysiwyg editor

        try
        {
            Outlook.Application outlook = new Outlook.Application();
            Outlook._MailItem outLookMailMessage = outlook.CreateItem(Outlook.OlItemType.olMailItem) as Outlook._MailItem;
            outLookMailMessage.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;

            outLookMailMessage.HTMLBody = htmlTemplate;
            outLookMailMessage.Subject = this.Subject;

            outLookMailMessage.Recipients.Add("somenone@somewhere.com");


            path = ""; //set some path to folder with images

            Outlook.Attachment attachment1 = outLookMailMessage.Attachments.Add(path, Outlook.OlAttachmentType.olEmbeddeditem, null, "");                                 
            attachment1.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E", "companylogo.jpg@EMBED");
            Outlook.Attachment attachment2 = outLookMailMessage.Attachments.Add(path, Outlook.OlAttachmentType.olEmbeddeditem, null, "");                                  
            attachment2.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E", "usersign.jpg@EMBED");
            outLookMailMessage.Send();
            outLookMailMessage = null;
        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
于 2012-08-01T13:39:00.473 に答える
0

画像の埋め込みに関するこの msdn スレッドを確認してください

于 2012-07-31T08:13:52.010 に答える