Отправить автоматическую электронную почту через службу Windows, которая имеет встроенное изображение, используя C # - PullRequest
5 голосов
/ 23 апреля 2010

У меня уже есть служба Windows C #, которую мы используем для внутреннего контроля каталога в нашей сети и, когда он обнаруживает изменение, отправляет электронное письмо с использованием нашего внутреннего SMTP-сервера указанным группам людей.

Мне нужно вставить изображение в это автоматическое письмо.Я понимаю, что мне нужно создать AlternateView и связанный ресурс и использовать cID связанного ресурса в AlternateView, правильно.

Что я не понимаю, это где я могу разместить изображение?Должен ли я добавить его в свой сервисный проект и установить Copy to Output Directory = Copy Always?Если да, то как мне получить доступ при создании моего LinkedResource?Кроме того, где я могу разместить изображение на Сервере, на котором размещена Служба?

Вот то, что у меня есть, но оно не работает.Я не получаю никаких ошибок, о которых мне известно, но я также не получаю письмо по электронной почте.Я предполагаю, что он ищет изображение, но у меня нет его в правильном месте.

// This event is called when an object(file,folder) is created in the srcPath
    void WatcherCreated(object source , FileSystemEventArgs e)
    {
        var folderName = e.Name;
        var folderPath = e.FullPath;

        MailMessage mail = new MailMessage();

        mail.From = new MailAddress("FolderMonitor@myWork.org");
        mail.To.Add("PSchaller@myWork.org");

        mail.Subject = "New Enrollment for " + folderName;

        AlternateView plainView = AlternateView.CreateAlternateViewFromString("This is the plain text view", null,
                                                                              "text/html");

        AlternateView htmlView =
            AlternateView.CreateAlternateViewFromString("Here is an embedded image. <img src=cid:enrollProcessID>",
                                                        null, "text/html");

        LinkedResource imageResourceLink = new LinkedResource("C:\\FolderMonitorService\\EnrollmentProcess.jpg")
                                               {ContentId = "enrollProcessID"};

        htmlView.LinkedResources.Add(imageResourceLink);

        mail.AlternateViews.Add(plainView);
        mail.AlternateViews.Add(htmlView);

        var smtp = new SmtpClient("internalSMTP");
        smtp.Send(mail);
    }

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

На самом деле, вы неправильно интерпретируете ошибку здесь. Насколько я вижу, ваш код абсолютно в порядке. Просто чтобы дважды проверить его, я скопировал его в простое приложение, обновил локальный путь к изображению и запустилэто - я сразу получил электронное письмо ..

Кроме того, если я укажу неправильный путь к файлу - он немедленно выдаст исключение, сообщив, что файл не найден:)

Если вы не получаете изображение в своем почтовом ящике, это может быть из-за того, что спам-фильтры его фильтруют ... Я исключаю здесь настройки сервера smtp, потому что вы говорите, что отправка версии в виде простого текста работает:)

UPD: Из личного опыта я рекомендую сменить кодировку на UTF8.Это был один из критериев, по которым мои почтовые сообщения были удалены спам-фильтрами. Кроме того, ваш код выглядит нормально, и я не вижу причин, по которым он не работает .. В конце концов, он работает на моей стороне:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...