2014-12-06 3 views
4

Я использую sendgrid SMTP API https://github.com/sendgrid/sendgrid-csharp для отправки электронной почты, но я не могу понять, как вставить изображение. Я могу сделать это с использованием .Net родной почты api без проблем. Я просто получаю плохой запрос. Вот мой код, который бросаетSendGrid SMTP API: Вставить изображение: неверный запрос

private static void Main(string[] args) 
    { 
     try { 
      //// Create the email object first, then add the properties. 
      var myMessage = new SendGridMessage(); 

      contact_list = new List<MailAddress>(); 
      contact_list.Add(new MailAddress("[email protected]")); 
      myMessage.To = contact_list.ToArray(); 
      myMessage.From = new MailAddress("[email protected]"); 
      myMessage.Subject = "Subject"; 

      string html = "<div><img src=cid:Logo /></div>"; 

      myMessage.Html = html; 
      myMessage.EmbedImage(@"C:\logo.png", "Logo"); 

      SendMessage(myMessage); 
     } 
     catch(Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 

    } 

    private static void SendMessage(SendGridMessage message) 
    { 
     // Create credentials, specifying your user name and password. 
     var credentials = new NetworkCredential("username", "pwdpwdpwd"); 

     // Create a Web transport for sending email. 
     var transportWeb = new Web(credentials); 

     // Send the email. 
     try 
     { 
      transportWeb.Deliver(message); 
      Console.WriteLine("Sent!"); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 

ответ

7

Я понял, как это работает. Используемый код:

var myMessage = new SendGridMessage(); 

contact_list = new List<MailAddress>(); 
contact_list.Add(new MailAddress("my email address")); 

myMessage.To = contact_list.ToArray(); 
myMessage.From = new MailAddress("[email protected]", "STP Client Service"); 
myMessage.Subject = "STP Report Package: " + package_report_name; 
string img = @"C:\\logo.png"; 
ContentType ctype = new ContentType("image/png"); 
var attachment = new Attachment(img, ctype); 
var linkedResource = new LinkedResource(img, ctype); 
myMessage.AddAttachment(attachment.ContentStream, attachment.Name); 
myMessage.EmbedImage(attachment.Name, linkedResource.ContentId); 

string html = "<img src=cid:"+linkedResource.ContentId+" />"; 
myMessage.Html = html; 
+0

Я изо всех сил пытался получить звонок «EmbedImage», но это все для меня, спасибо! ;) –

+0

Вы должны указать вложение. Имя, потому что по умолчанию оно равно NULL – SochiX

+0

И действительно ли эти изображения появляются в виде вложений? Когда я отправляю с использованием '' в HTML и добавляя вложение с 'cid: logo.png' в API, они отлично работают в Outlook, но не в Gmail. Пробовал использовать ваш код, и все еще Outlook показывает встроенный, но Gmail по-прежнему показывает пустой placeholder. – ajeh

3

Нет необходимости создавать объекты ContentType и LinkedResource. Добавьте внедренное изображение в качестве вложения. Также метод EmbedImage предполагает имя изображения, а не полный путь.

Следующий код работает:

вар MyMessage = новый SendGridMessage();

 contact_list = new List<MailAddress>(); 
     contact_list.Add(new MailAddress("[email protected]")); 
     myMessage.To = contact_list.ToArray(); 
     myMessage.From = new MailAddress("[email protected]"); 
     myMessage.Subject = "Subject"; 

     string html = "<div><img src=cid:Logo /></div>"; 

     myMessage.Html = html; 
     **myMessage.AddAttachment(@"C:\logo.png"); 
     myMessage.EmbedImage("logo.png", "Logo");** 

     SendMessage(myMessage); 
Смежные вопросы