Hinzufügen von Bildern zu System.Net.E-Mail-Nachricht
Ich habe einige gespeicherte Bilder in den Ressourcen.resx-Datei, in der meine Lösung. Ich möchte diese Bilder in meine E-Mail. Ich habe geladen, das Bild in eine variable:
Bitmap myImage = new Bitmap(Resources.Image);
und jetzt will ich steckte ihn in den HTML-Code in die AlternateView string ich benutze zum erstellen der HTML-E-Mail. Brauchen nur etwas Hilfe.
Hier ist der HTML-string(teilweise):
body += "</HEAD><BODY><DIV style='height:100%; width:700px;'><div style='height:70px; width:700px; background-color:red;'><img src='" + myImage + "' width='104' height='27' alt='img' style='margin: 20px 0px 0px 20px;'/></div>
Jede Hilfe wäre sehr geschätzt, Danke!
EDIT: Hier ist der gesamte Code-block. Ich glaube, ich bin kurz davor es einfach die Unerfahrenheit, die immer in der Art hier 🙂 ich habe versucht, die Umwandlung in ein Byte-wie vorgeschlagen-das hat mir weiter. Noch nicht Rendern des Bildes. Gibt es hier etwas Tue ich nicht Recht. Vielen Dank so viel für alle von Euch allen helfen! Hier ist der code (die HTML-brauche ich für das Bild ist in der 3 Zeile der string body = code):
if (emailTo != null)
{
Bitmap myImage = new Bitmap(Resources.comcastHeader);
ImageConverter ic = new ImageConverter();
Byte[] ba = (Byte[])ic.ConvertTo(myImage, typeof(Byte[]));
MemoryStream image1 = new MemoryStream(ba);
LinkedResource headerImage = new LinkedResource(image1, "image/jpeg");
headerImage.ContentId = "companyLogo";
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add("" + emailTo + "");
message.Subject = "" + customer + " Your order is being processed...";
message.From = new System.Net.Mail.MailAddress("[email protected]");
string body = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">";
body += "</HEAD><BODY><DIV style='height:100%; width:700px;'><div style='height:70px; width:700px; background-color:red;'><img src=\"cid:companyLogo\" width='104' height='27' alt='img' style='margin: 20px 0px 0px 20px;'/></div><P>Hello " + customer + ",</P><P>Thank you for shopping at <a href='" + store + "'>" + store + "</A>. Your order is being processed and will be shipped to you soon. We would like to take this time to thank you for choosing Storm Copper Components, and we hope you are completely satisfied with your purchase. Please review your information and make sure all the information is correct. If there are any errors in your order, please contact us immediately <A href='mailto:[email protected]'>here.</A></P>";
body += "<P><B>Here is your order information:</B></P>";
body += "<H3>Contact Information</H3><TABLE><TR><TD><B>Name:</B> " + customer + "</TR></TD><TR><TD><B>Address:</B> " + street + " " + city + ", " + state + " " + zip + "</TR></TD><TR><TD><B>Email:</B> " + emailTo + "</TR></TD><TR><TD><B>Phone:</B> " + phone + "</TR></TD><TR><TD></TD></TR></TABLE>";
body += "<H3>Products Ordered</H3><TABLE>" + productInformation + "</TABLE><BR /><BR />";
body += "<H3>Pricing Information</H3><TABLE><TR><TD>Subtotal: $" + subTotal + "</TD></TR><TR><TD>Shipping: $" + shippingInfo + " </TD></TR><TR><TD>Tax: $" + taxInfo + "</TD></TR><TR><TD><B>Total:</B> $" + total + "</TD></TR><BR /></TABLE>";
body += "<P>Thank you for shopping with us!</P><A href='stormcopper.com'>Storm Copper Components</A>";
body += "<P><I>This is an Auto-Generated email sent by store copper. Your email will not be sent to Storm Copper Components if you reply to this message. If you need to change any information, or have any questions about your order, please contact us using the information provided in this email.</I></P></DIV></BODY></HTML>";
ContentType mimeType = new System.Net.Mime.ContentType("text/html");
AlternateView alternate = AlternateView.CreateAlternateViewFromString(body, mimeType);
message.AlternateViews.Add(alternate);
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("########");
smtp.Send(message);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
müssen Sie fügen Sie Sie in die E-Mail-Nachricht, wie CID ' s/verknüpften Ressourcen.
hier ist etwas code, den ich verwendet haben, bevor das funktioniert gut. Ich hoffe, das gibt Ihnen einige Hinweise:
Erstellen Sie eine
AlternateView
:Erstellen Sie eine Verknüpfte Ressource:
//fügen Sie es auf die alternative Ansicht
//schließlich, fügen Sie die alternative Darstellung für die Nachricht:
hier ist eine Dokumentation zu helfen, Sie mit dem, was die AlternativeView und LinkedResources sind und wie es funktioniert:
http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews(v=vs. 110).aspx
http://msdn.microsoft.com/en-us/library/system.net.mail.linkedresource(v=vs. 110).aspx
http://msdn.microsoft.com/en-us/library/ms144669(v=vs. 110).aspx
in der HTML selbst, müssen Sie etwas tun, wie die folgenden:
beachten Sie die CID gefolgt von einem string format {0} - dann verwende ich dies, um es zu ersetzen mit einem zufälligen Wert.
UPDATE
Zurück und kommentieren die Plakate Kommentare... hier ist die funktionierende Lösung für das poster:
//dann die Nachricht senden!
Ist eine option, das Bild in einem host und in der src die url-Adresse, wie dies "src='http://www.host/myImage.jpg'"
Diese Weise werden Sie nicht haben, laden Sie das Bild in jeder E-mail und wäre flexibler.
Wenn es jemand hilft, hier ist eine version, basierend auf Ahmed ilyas " sehr nützliche Antwort, geht die eigentliche Bitmap des Speicher-stream, und umschließt die verschiedenen Objekte, die für die Einführung
IDisposable
imusing
Blöcke -Ich weiß, dies ist eine alte post, aber wenn jemand noch trifft dies nach einer Antwort zu suchen (wie ich), dann habe ich eine einfachere Antwort.
Können Sie eine einfache überlastung der LinkedResource-Objekt, das direkt übernimmt den Pfad der Datei als parameter. So gibt es keine Notwendigkeit, explizit Bild laden in den Speicher zu streamen. Natürlich, in diesem Beispiel davon ausgegangen, dass Sie Zugriff auf das Bild auf der Festplatte -
Hier ist die komplette Funktion code, die für mich gearbeitet -
sollten Sie nicht berechtigt, die
Bitmap
Objekt<img>
tag, wie erwartet, dass der image-Pfad.Durch dies ersetzen:
Mit folgenden :