C# printscreen küldése email-ben probléma

C# printscreen küldése email-ben probléma
2019-05-28T17:53:17+02:00
2019-05-31T14:16:34+02:00
2022-10-15T21:41:09+02:00
santaro
Sziasztok,

az lenne a feladatom, hogy egy programban generált riportról(aktuális képernyő) egy gombnyomással készítsen egy képernyő képet és küldje is el a email-ben.
A képernyő képre egyenlőre annyit csináltam, hogy beilleszti egy pictureBox-ba és külön működik az email küldés is.
Azonban a levélbe kellene, hogy beillessze és nem csatolmányban, mivel így könnyebb telefonon is megnézni.
Van erre valami egyszerű megoldás?

Előre is köszönöm!

Ez az eddigi kód:

private void button1_Click(object sender, EventArgs e)
{
Thread pic_thread = new Thread(screen_Shot);
pic_thread.Start();
}
void screen_Shot()
{

Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(bitmap as Image);

graphics.CopyFromScreen(5, 5, 5, 5, bitmap.Size);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = bitmap;

SendHTMLMail shm = new SendHTMLMail();
shm.From = new MailAddress("REPORT@valami.COM");
shm.To.Add(new MailAddress("pityu@valami.com", "pityu"));
shm.subject = "riport - " + DateTime.Today.ToShortDateString();
shm.body = "Sziasztok";
shm.Send();
}
Mutasd a teljes hozzászólást!
mail.AlternateViews.Add(htmlView);

Itt ilyet írnak. De van más is.

Send inline image in email
Mutasd a teljes hozzászólást!

  • Hali!

    Használd a forráskód-gombot (a szerkesztő-mező felett, balról a harmadik: </>), ha forráskódot illesztesz be.

    Mutasd a teljes hozzászólást!
  • Jogos,kapkodtam.
    Mutasd a teljes hozzászólást!
  • Sziasztok,

    kicsit változott a kód.
    A probléma az, hogy inline kell megoldanom a beillesztést, viszont a print screen helyett csak egy ikon jelenik meg.

    Aktuális kód:

    private void button1_Click(object sender, EventArgs e) { Thread pic_thread = new Thread(screen_Shot); pic_thread.Start(); } void screen_Shot() { Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics graphics = Graphics.FromImage(bitmap as Image); graphics.CopyFromScreen(5, 5, 5, 5, bitmap.Size); bitmap.Save(@"C:\Users\tmpMod.png"); string htmlBody = "<html><body><h1>Picture</h1><br><img src="cid:tmpMod.Jpeg"></body></html>"; AlternateView avHtml = AlternateView.CreateAlternateViewFromString (htmlBody,null, System.Net.Mime.MediaTypeNames.Text.Html); LinkedResource inline = new LinkedResource(@"C:\Users\tmpMod.png", System.Net.Mime.MediaTypeNames.Image.Jpeg); inline.ContentId = Guid.NewGuid().ToString(); avHtml.LinkedResources.Add(inline); SendHTMLMail shm = new SendHTMLMail(); Attachment att = new Attachment(@"C:\Users\tmpMod.png"); att.ContentDisposition.Inline = true; shm.From = new MailAddress("valami@valami.COM"); shm.To.Add(new MailAddress("én@valami.com", "Pityu")); shm.subject = "RET riport - " + DateTime.Today.ToShortDateString(); shm.body = String.Format("<h3>Sziasztok!\n" + "\n Riport csatolva!</h3>" + @"<img src=""cid:{0}"" />", att.ContentId); shm.IsBodyHtml = true; shm.Send(); MessageBox.Show("E-mail elküldve, adatok feltöltve!"); }
    Mutasd a teljes hozzászólást!
  • mail.AlternateViews.Add(htmlView);

    Itt ilyet írnak. De van más is.

    Send inline image in email
    Mutasd a teljes hozzászólást!
  • Sajnos a framework beépített osztályai több helyen nem felelnek meg a szabványoknak. Az ezzel készített levelek egyes klienseken nem jelennek meg rendesen (legalábbis pár éve ez volt a helyzet).

    Én sok próbálkozás után végül MailKit-et használok, az rendben működik, egyszerű API-val.
    Mutasd a teljes hozzászólást!
  • Köszi, ez jó észrevétel volt, valóban kimaradt a kódból :)
    Mutasd a teljes hozzászólást!
  • Ezt céges belső levelezéshez kell lefejlesztenem (web outlook), az egész progi(elég nagy falat volt) nem került annyi munkába, mint az extrák, többek között ez a rész.

    Már csak annyi problémám maradt, hogy az alábbi részletben nem jöttem rá, hogy mit is kell megadni a "Picture" részben.
    Biztos egyszerű de nagyon péntek van és még nem csináltam hasonlót sem, HTML-ben pedig nem vagyok jártas.

    Kód:

    string htmlBody = "<html><body><h1>Picture</h1><br><img src="cid:filename"></body></html>";
    Mutasd a teljes hozzászólást!
  • H,
    Emlékeim szerint egy mht-szerű file-t (szöveget) kell létrehozni, s abban kell az inline képeket tárolni. A képeket a location azonosítja, ami gyakorlatilag az src attribútummal kerül megfeleltetésre. Persze a képadatokat base64-ben szokás elkódolni.
    valami ilyesmi:

    From: ... Subject: ... Date: ... MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="---==akarmi" X-MimeOLE: ... ---==akarmi Content-Type:text/html charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: ... <html> <head> </head> <body> <img src="ezakepkell.jpg" alt=""/> </body> </html> ---==akarmi Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: ezakepkell.jpg ...tobbi fejlec ha kell ... ... base64 adat ...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd