2016-01-13 4 views
1

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

Кто-нибудь знает, как активировать/выполнить этот код или узнать где-то, что я испортил. Спасибо.

using System; 
using System.Management; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Collections; 
using System.Net.Mail; 
using System.Net.NetworkInformation; 
using System.Diagnostics; 
using System.Reflection; 
using System.Runtime.InteropServices; 
using Microsoft.Office.Interop.Outlook; 
using Outlook = Microsoft.Office.Interop.Outlook; 


namespace email 
{ 
    class Program 
    { 
     private void ThisAddIn_Startup(object sender, System.EventArgs e) 
     { 
      SendEmailtoContacts(); 
     } 

     private void SendEmailtoContacts() 
     { 
      string subjectEmail = "test results "; 
      string bodyEmail = "test results"; 
      Microsoft.Office.Interop.Outlook.Application appp = new 
      Microsoft.Office.Interop.Outlook.Application(); 
      Microsoft.Office.Interop.Outlook.MAPIFolder sentContacts = 
      appp.ActiveExplorer().Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.O lDefaultFolders.olFolderContacts); 

      foreach (Outlook.ContactItem contact in sentContacts.Items) 
      { 
       if (contact.Email1Address.Contains("gmail.com")) 
       { 
        this.CreateEmailItem(subjectEmail, contact.Email1Address, bodyEmail); 
       } 
      } 
     } 

     private void CreateEmailItem(string subjectEmail,string toEmail, string bodyEmail) 
     { 
      Microsoft.Office.Interop.Outlook.Application app = new 
      Microsoft.Office.Interop.Outlook.Application(); 
      Microsoft.Office.Interop.Outlook.MailItem eMail = 
      app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 

      eMail.Subject = subjectEmail; 
      eMail.To = toEmail; 
      eMail.Body = bodyEmail; 
      eMail.Importance = Outlook.OlImportance.olImportanceLow; 
      ((Outlook._MailItem)eMail).Send(); 
     } 

     static void Main(string[] args) 
     { 

     } 
    } 
} 

/////////////////////////////////////////// ////////////////

правильный код:.

using System; 
using System.Management; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Collections; 
using System.Net.Mail; 
using System.Net.NetworkInformation; 
using System.Diagnostics; 
using System.Reflection; 
using System.Runtime.InteropServices; 
using Microsoft.Office.Interop.Outlook; 
using Outlook = Microsoft.Office.Interop.Outlook; 


namespace email 
{ 
class Program 
{ 

    static void Main(string[] args) 
    { 

     SendEmailtoContacts(); 
     CreateEmailItem("yo", "[email protected]", "yoyoyoyoyo"); 
    } 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     SendEmailtoContacts(); 
    } 

    private static void SendEmailtoContacts() 
    { 
     string subjectEmail = "test results "; 
     string bodyEmail = "test results"; 
     Microsoft.Office.Interop.Outlook.Application appp = new 
     Microsoft.Office.Interop.Outlook.Application(); 
     Microsoft.Office.Interop.Outlook.MAPIFolder sentContacts =  

appp.ActiveExplorer() Session.GetDefaultFolder (Microsoft.Office.Interop.Outlook.O lDefaultFolders.olFolderContacts);

 foreach (Outlook.ContactItem contact in sentContacts.Items) 
     { 
      if (contact.Email1Address.Contains("gmail.com")) 
      { 
       CreateEmailItem(subjectEmail, contact.Email1Address, 
bodyEmail); 
      } 
     } 
    } 

    private static void CreateEmailItem(string subjectEmail, string  
toEmail,  string bodyEmail) 
    { 
     Microsoft.Office.Interop.Outlook.Application app = new 
     Microsoft.Office.Interop.Outlook.Application(); 
     Microsoft.Office.Interop.Outlook.MailItem eMail = 

app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 

     eMail.Subject = subjectEmail; 
     eMail.To = toEmail; 
     eMail.Body = bodyEmail; 
     eMail.Importance = Outlook.OlImportance.olImportanceLow; 
     ((Outlook._MailItem)eMail).Send(); 
    } 



} 
} 
+0

почему вы используете Interop вы можете сделать это гораздо проще, используя 'SMTP', если вы хотите рабочий метод, который я могу разместить один для вас с гораздо меньшим количеством кода, который работает, я также заметить, что у вас есть главная точка входа .. но вы не выполняете какой-либо код .. так как вы ожидаете фактически запустить любой код ..? – MethodMan

+0

Нужна дополнительная информация. Можете ли вы отладить добавление?Является ли функция SendEmailtoContacts() когда-либо вызываемой на ThisAddIn_Startup? Если вы закомментируете строку .Send(), то окно Outlook должно фактически оставаться открытым на вашем рабочем столе, и вы должны увидеть электронную почту, ожидающую отправки. – nvuono

ответ

1

вы можете использовать SMTP, чтобы сделать это

using System.Net; 
using System.Net.Mail; 
using System.Configuration; 

static void Main(string[] args) 
{ 
    SendEmail("[email protected]", "This is a Test email", "This is where the Body of the Email goes"); 
} 

public static void SendEmail(string sTo, string subject, string body) 
{ 
    var Port = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]); 
    using (var client = new SmtpClient(Your EmailHost, Port)) 
    using (var message = new MailMessage() 
    { 
     From = new MailAddress(FromEmail), 
     Subject = subject, 
     Body = body 
    }) 
    { 
     message.To.Add(sTo); 
     client.DeliveryMethod = SmtpDeliveryMethod.Network; 
     client.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["EmailCredential"], 
       ConfigurationManager.AppSettings["EmailPassword"]); 
     client.EnableSsl = true; 
     client.Send(message); 
    }; 
} 

, если вы хотите получить список контактов отправить одно письмо, а затем создать List<string> и используя цикл Еогеасп добавить их к message.To.Add(sTo) части код .. довольно прямо вперед ..

если вы настаиваете на использовании Outlook, для отправки сообщений электронной почты, то смотрит на эту ссылку MSDN

Programmatically Send E-Mail Programmatically

+0

im get red squigglies всюду на этом фрагменте smtp, какое пространство имен вы используете? просто Symstem.net .... после того, как я набираю int.PArse нет опции для Configuration Manager, я пытаюсь выяснить, если im moissing ссылка, спасибо – Lukeriggz

+0

Я буду обновлять .. Имейте в виду, я не использую Interop, чтобы эти не понадобится в моем рабочем примере 'using System.Runtime.InteropServices; с использованием Microsoft.Office.Interop.Outlook; using Outlook = Microsoft.Office.Interop.Outlook; ' – MethodMan

+0

да, я получил interop для работы сейчас, я пытаюсь использовать smtp, я пытаюсь написать код, который использует smtp также – Lukeriggz

0

Вашего вопрос название говорит: «C# консольного приложения для отправки электронной почты автоматически», но вы, кажется, с помощью кода, который должен был для Outlook, надстройки. Надстройка предназначена для вызова функции SendEmail при запуске надстройки, исполняющих бы ThisAddIn_Startup:

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     // this is never executed because it isn't an outlook addin 
     SendEmailtoContacts(); 
    } 

    private void SendEmailtoContacts() 
    { 
     // sends your email... if it actually gets called 
    } 

Вместо этого попробуйте вызова, что SendEmailtoContacts() функцию от вашего Main(), потому что это консоль приложение и Main() является то, что на самом деле выполняется при запустить его:

 static void Main(string[] args) 
     { 
      SendEmailtoContacts(); 
     } 

для дальнейшей отладки, как я отметил в комментарии, потому что это перспектива Interop вы должны быть в состоянии видеть эти операции происходят в окне внешнего вида, как они выполняются на локальном рабочем столе. Например, если вы закомментируете окончательную строку ((Outlook._MailItem)eMail).Send(); и запустите программу, вам следует оставить электронное письмо, ожидающее нажатия кнопки отправки после завершения вашей программы.


Похоже, вы также должны изменить сигнатуры методов из других функций к статическим методам и избавиться от это ссылки в this.CreateEmailItem?

 public static void SendEmailtoContacts() 
     { 
      string subjectEmail = "test results "; 
      string bodyEmail = "test results"; 
      Microsoft.Office.Interop.Outlook.Application appp = new 
      Microsoft.Office.Interop.Outlook.Application(); 
      Microsoft.Office.Interop.Outlook.MAPIFolder sentContacts = 
      appp.ActiveExplorer().Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.O lDefaultFolders.olFolderContacts); 

      foreach (Outlook.ContactItem contact in sentContacts.Items) 
      { 
       if (contact.Email1Address.Contains("gmail.com")) 
       { 
        CreateEmailItem(subjectEmail, contact.Email1Address, bodyEmail); 
       } 
      } 
     } 

     public static void CreateEmailItem(string subjectEmail,string toEmail, string bodyEmail) 
     { 
      Microsoft.Office.Interop.Outlook.Application app = new 
      Microsoft.Office.Interop.Outlook.Application(); 
      Microsoft.Office.Interop.Outlook.MailItem eMail = 
      app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 

      eMail.Subject = subjectEmail; 
      eMail.To = toEmail; 
      eMail.Body = bodyEmail; 
      eMail.Importance = Outlook.OlImportance.olImportanceLow; 
      ((Outlook._MailItem)eMail).Send(); 
     } 
+1

Я не могу позвонить SendEmailtoContacts() в основном. Visual Studio не распознает его как метод, поэтому я попытался сделать его общедоступным, и теперь есть ошибка в представлении foreach, где сказано this.CreateEmailItem. и внешний вид вообще не возникает, когда я запускаю это. Причина, по которой я хочу использовать outlook, заключается в том, что это для моей работы, и есть блоки безопасности во всем мире, мне сказали использовать внешний вид, потому что он использовал бы мои текущие учетные данные для входа в систему и отправки – Lukeriggz

+0

. Вы на правильном пути, запомнив, что это не был статическим методом, поэтому SendEmailtoContacts не мог быть вызван. Другая проблема заключается в том, что, поскольку это был аддон *, этот * должен был ссылаться на какую-то другую функцию, которая создает электронное письмо – nvuono

+0

да, я имею в виду, что я оптимизирую код кого-то elses, поэтому было бы лучше поговорить с ними, потому что я мог чего-то упустить. плохо играть со способом smtp. Я не gunna, я беспокоюсь о том, как я не могу заставить это работать, кто-то имел успех в использовании автоматического добавления Outlook, я делаю это с помощью приложений с окнами, но я просто хочу запустить exe, который отправит Эл. адрес. jw спасибо всем за помощь – Lukeriggz

Смежные вопросы