2017-01-23 2 views
0

Мне удалось создать простое приложение, которое отправит электронное письмо с определенным текстом, но мне интересно, возможно ли это отправить одно и то же сообщение электронной почты, но с текстом скопирован в буфер обмена?Отправить содержимое буфера обмена по электронной почте с помощью Console Application C#

В моем oMail.TextBody Я хотел бы вставить содержимое буфера обмена и отправить его по электронной почте.

static void Main(string[] server) 
    { 
     SmtpMail oMail = new SmtpMail("TryIt"); 
     EASendMail.SmtpClient oSmtp = new EASendMail.SmtpClient(); 

     // Set sender email address 
     oMail.From = "myEmail"; 

     // Set recipient email address 
     oMail.To = "myEmail"; 

     // Set email subject 
     oMail.Subject = "test email from c# project"; 

     // Set email body 
     oMail.TextBody = "Clipboard content pasted here..." 
    } 

Есть ли способ сделать это? Кроме того, я использую пространство имен using EASendMail.

+0

'Clipboard.GetText()' – Pikoh

+0

@Pikoh Спасибо за ваше предложение, но где я должен его использовать. 'oMail.TextBody = Clipboard.GetText();' Я пробовал, но он отправляет пустое электронное письмо. –

+0

Сначала убедитесь, что в буфере обмена содержится текст – Pikoh

ответ

0

В консольном приложении буфер обмена доступен в определенных состояниях потоков, в частности в STA.

Посмотрите на this SO question для пояснения.

Таким образом, написать статический метод, как это:

static string GetClipboardText() 
{ 
    string result = string.Empty; 
    Thread staThread = new Thread(x => 
    { 
     try 
     { 
      result = Clipboard.GetText(); 
     } 
     catch (Exception ex) 
     { 
      result = ex.Message; 
     } 
    }); 
    staThread.SetApartmentState(ApartmentState.STA); 
    staThread.Start(); 
    staThread.Join(); 
    return result; 
} 

и использовать его в основной метод

oMail.TextBody = GetClipboardText(); 
+0

Спасибо за ваш ответ. Однако то, что я сделал, оставлял код так же, как и без изменений, но я только что добавил '[STAThread]' выше 'static void Main (string [] server)'. Работает на меня. спасибо –