2017-01-23 32 views
0

我已經設法創建一個簡單的應用程序,它將發送帶有特定文本的電子郵件,但我想知道這是可能發送相同的電子郵件,但與文本的內容被複制到剪貼板?使用控制檯應用程序通過電子郵件發送剪貼板內容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

感謝您的回答。 但是我所做的就是將代碼保留下來,因爲它沒有任何更改,但我剛剛在靜態無效Main(字符串[]服務器)'上面添加了'[STAThread]'。適用於我。謝謝 –

相關問題