2015-11-20 3 views
0

Я начинаю почтовый клиент по умолчанию с System.Diagnostics.ProcessC# запуск почтового клиента

string mailto = string.Format("mailto:{0}?Subject={1}&Body={2}", 
       "[email protected]", Title, TextBlockTechnicalError.Text); 
System.Diagnostics.Process.Start(mailto); 

Однако содержание тела сообщения электронной почты будет отрезано половина way.It не показывает все, что в TextBlockTechnicalError. Как я могу избежать этого?

+1

пожалуйста показать ваш полный код – Nostradamus

+0

содержит ли строка тела разделитель символов, которые могут потребоваться избежать? Кроме того, опубликуйте [MCVE] (http://stackoverflow.com/help/mcve). Сначала вы используете '?' В качестве разделителя, но затем используете '&'? – ray

+0

Возможно, вам потребуется URL-адрес для кодирования текстовых параметров. – DavidG

ответ

1

Я думаю, что этого избежать не может, потому что он обрезается из-за максимальной длины командной строки (около 8 тыс. Символов).

Если вы знаете, что все пользователи будут использовать Outlook, в качестве почтового клиента, то вы можете попробовать этот метод

public void Mail(string receiver, string subject, string body) 
{ 
    Outlook.Application outlook = System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Length > 0 
    ? Marshal.GetActiveObject("Outlook.Application") as Outlook.Application 
    : new Outlook.Application(); 
    Outlook.MailItem mailItem = outlook.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem; 
    if (mailItem == null) throw new Exception("Outlook failed!"); 
    mailItem.To = receiver ?? string.Empty; 
    mailItem.Subject = subject; 
    mailItem.Body = body; 
    mailItem.Display(); 
}