在电子邮件中保存图像和显示

时间:2017-03-20 17:13:35

标签: c# asp.net

我有这段代码,它执行以下操作:

生成条形码:

QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeGenerator.QRCode qrCode = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);

然后我把它保存为png:

string publicPath = @"c:\inetpub\folder\Images\QRCodes\" + saveFile;

using (Bitmap bitMap = qrCode.GetGraphic(20))
using (MemoryStream ms = new MemoryStream())
{
    bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

    using (FileStream file = new FileStream(publicPath, FileMode.Create, FileAccess.Write))
    {
        ms.WriteTo(file);
        file.Close();
        ms.Close();
    }
}

到目前为止,这一切都运作良好。

现在我正在尝试将此已保存的图像显示在电子邮件中,而不是作为附件显示,但显示电子邮件并将其发送出去,我尝试了以下操作:

var message = "<img src='" + publicPath + "' width='500' />";

using (SmtpClient client = new SmtpClient("xxx.xxx.x.xx"))
{
    MailAddress to = new MailAddress("example@domain.com");
    MailAddress from = new MailAddress("webmaster@domain.com");
    MailMessage email = new MailMessage(from, to);
    email.Subject = "Subject Line";
    email.Body = message;
    email.IsBodyHtml = true;
    try
    {
        client.Send(email);
    }
    catch (Exception ex)
    {
        Console.Write(ex);
    }
}

这会发送没有错误的电子邮件,但图片不会显示在电子邮件中。我做错了什么?

1 个答案:

答案 0 :(得分:0)

publicPath 本地文件夹路径 。你需要像图像一样的东西 -

http://www.yourwebsite.com/Images/QRCodes/file.png

然后,使用 绝对网址 创建图像源。

var message = string.Format(
   "<img src='http://www.yourwebsite.com/Images/QRCodes/{0}' width='500' />",  saveFile);

我只是猜测文件夹路径。请确保它是正确的。

其他想法

我强烈建议您使用HttpRuntime.AppDomainAppPath代替硬编码c:\inetpub\folder。主要是,如果在Web服务器中移动文件夹位置,则无法再次重新编译整个应用程序。

string publicPath = string.Format("{0}\\Images\\QRCodes\\{1}", 
    HttpRuntime.AppDomainAppPath, saveFile);