C# 本地计算机上带有图像的电子邮件发件人应用程序

C# 本地计算机上带有图像的电子邮件发件人应用程序,c#,visual-studio-2010,image,email,C#,Visual Studio 2010,Image,Email,我有一个小的电子邮件应用程序,它允许用户从复选框中生成消息,然后将消息作为电子邮件发送。我正在尝试向电子邮件中添加图像,即徽标或签名。该应用程序运行良好,但当我研究如何将图像放入电子邮件时,我发现我应该使用System.Net.Mail而不是Interop。因此,我将我的电子邮件类更改为下面的代码。现在我没有收到电子邮件。我假设这是因为代码是为服务器设置的,我只想在本地机器上运行它。这只是我用来帮助我理解一些概念的东西,所以现实世界中的使用不会成为一个因素。我只想在本地Outlook电子邮件帐户

我有一个小的电子邮件应用程序,它允许用户从复选框中生成消息,然后将消息作为电子邮件发送。我正在尝试向电子邮件中添加图像,即徽标或签名。该应用程序运行良好,但当我研究如何将图像放入电子邮件时,我发现我应该使用System.Net.Mail而不是Interop。因此,我将我的电子邮件类更改为下面的代码。现在我没有收到电子邮件。我假设这是因为代码是为服务器设置的,我只想在本地机器上运行它。这只是我用来帮助我理解一些概念的东西,所以现实世界中的使用不会成为一个因素。我只想在本地Outlook电子邮件帐户上测试我的小程序。我的代码如下

using System;
using System.Net.Mail;
using System.Net.Mime;

namespace Email_Notifier  
{
    public class EmailSender:Notification
    {
        string emailRecipient = System.Configuration.ConfigurationManager.AppSettings    ["emailRecipient"];

        public void SendMail(string message)
        {
            try
            {
                string strMailContent = message;
                string fromAddress = "MyApp@gmail.com";
                string toAddress = emailRecipient;
                string contentId = "image1";
                string path = (@"C:Libraries/Pictures/Logo.gif");  

                MailMessage mailMessage = new MailMessage(fromAddress, toAddress);
                mailMessage.Subject = "Email Notification";

                LinkedResource logo = new LinkedResource( path , MediaTypeNames.Image.Gif);
                logo.ContentId = "Logo";
                // HTML formatting for logo
                AlternateView av1 = AlternateView.CreateAlternateViewFromString("<html><body><img src=cid:Logo/><br></body></html>" + strMailContent, null, MediaTypeNames.Text.Html);
                av1.LinkedResources.Add(logo);

                mailMessage.AlternateViews.Add(av1);
                mailMessage.IsBodyHtml = true;
                SmtpClient mailSender = new SmtpClient("localhost"); 
                mailSender.Send(mailMessage);
            }

            catch (Exception e)
            {
                Console.WriteLine("Problem with email execution. Exception caught: ", e);
            }
            return;
        }
    }
}
使用系统;
使用System.Net.Mail;
使用System.Net.Mime;
命名空间电子邮件通知程序
{
公共类EmailSender:通知
{
字符串emailRecipient=System.Configuration.ConfigurationManager.AppSettings[“emailRecipient”];
公共void SendMail(字符串消息)
{
尝试
{
字符串strMailContent=消息;
字符串fromAddress=”MyApp@gmail.com";
字符串toAddress=emailRecipient;
字符串contentId=“image1”;
字符串路径=(@“C:Libraries/Pictures/Logo.gif”);
MailMessage MailMessage=新的MailMessage(fromAddress,toAddress);
mailMessage.Subject=“电子邮件通知”;
LinkedResource徽标=新的LinkedResource(路径,MediaTypeNames.Image.Gif);
logo.ContentId=“logo”;
//标志的HTML格式
AlternateView av1=AlternateView.CreateAlternateView-FromString(“
”+strMailContent,null,MediaTypeNames.Text.Html); av1.LinkedResources.Add(徽标); mailMessage.AlternateViews.Add(av1); mailMessage.IsBodyHtml=true; SmtpClient mailSender=新SmtpClient(“本地主机”); mailssender.Send(mailMessage); } 捕获(例外e) { Console.WriteLine(“电子邮件执行问题。捕获异常:”,e); } 返回; } } }
您指定
mailssender=new-SmtpClient(“localhost”)

您是否在本地计算机上设置了SMTP服务器?如果没有,则需要这样做才能使用
SmtpClient
。否则,请指定一个主机名而不是
localhost
,可能使用指定的Gmail帐户,记住您需要将其配置为身份验证和SSL

另见


我还可以看到您的代码中还有一两个其他问题,但让我们在简单的邮件发送工作完成后再处理这些问题。

如果您的问题是您的计算机上没有与您交谈的smtp服务器,您将看到一个异常,而不仅仅是默默地不发送电子邮件(我相信这就是你所看到的,因为你没有列出例外情况,但不能完全确定)。可能是您正在成功传递到本地smtp服务器,但无法在上发送邮件。如果您安装了iis smtp服务器,并且正试图使用该服务器发送邮件,则可以在C:\Inetpub\mailroot的子目录中看到失败的电子邮件。有一个死信子目录应包含f有问题的交货


如果您使用的是windows 7,则它不支持iis smtp服务器。在您的计算机上安装smtp服务器的另一种选择是,该服务器不实际发送电子邮件,但会向您显示任何电子邮件地址的所有信息。即使我的操作系统中有可用的iis smtp服务器,我也更愿意使用它进行开发eds.

好的,我已经改变了。你看到的其他问题是什么?我知道这些一定是noob错误,但你必须从某个地方开始。首先,
string path=(@“C:Libraries/Pictures/Logo.gif”)那不是一个有效的路径。还没有…我确实收到了一条警告,声明了contentId,但从未使用过。所有东西都不会编译错误,但也不会编译电子邮件。我可能必须仔细梳理这些错误,当我记下错误时重新发布。这意味着电子邮件应该在你的Gmail帐户的发送项目中结束(假设这就是您将
SmtpClient
更改为使用的)或同等版本。这值得检查。