2015-05-11 1 views
1

Я могу успешно отправить электронное письмо с помощью ShellExecute. Правильно указан адрес «Адрес», «Адрес отправителя» является правильным, а Subject является правильным. Тело письма правильное, за исключением того, что нет разрывов строк, и все выглядит как один абзац без разрывов строк. Почтовый клиент по умолчанию в моем случае - почтовая служба Windows 8.1.Как включить разрывы строк в сообщении электронной почты, созданном с помощью ShellExecute?

Мой вопрос: можно ли использовать ShellExecute, чтобы разрывы строк сохранялись? Я не собираюсь отправлять электронную почту напрямую с Indy. Все, что мне нужно сделать, это отправить электронное письмо на почтовый клиент по умолчанию и правильно отформатировать его.

procedure TForm1.Email1Click(Sender: TObject); 
var 
    iGridTableItem: TcxCustomGridTableItem; 
    iName, iDate, iEmail, iSubject, iBody, iParam: string; 
begin 
    iGridTableItem := cxGrid1DBTableView1.DataController. 
    GetItemByFieldName('EMail'); 
    if iGridTableItem.EditValue <> null then 
    iEmail := iGridTableItem.EditValue; 
    iGridTableItem := cxGrid1DBTableView1.DataController. 
    GetItemByFieldName('Name'); 
    if iGridTableItem.EditValue <> null then 
    iName := iGridTableItem.EditValue; 
    iGridTableItem := cxGrid1DBTableView1.DataController. 
    GetItemByFieldName('Date'); 
    if iGridTableItem.EditValue <> null then 
    iDate := DateToStr(iGridTableItem.EditValue); 
    iSubject := 'ImageEn EBook'; 
    iBody := 'Dear Mr. ' + iName + ',' + sLineBreak + sLineBreak + 
    'PayPal has advised me that you purchased xxxxx on ' + iDate + 
    '.' + ' Thank-you for your purchase.' + sLineBreak + sLineBreak + 'You may ' + 
    'download the xxx at' + sLineBreak + 
    'http://www.xxxxx.xxx/xxx/EBook/xxx101.zip' + sLineBreak + 
    'Best regards,' + sLineBreak + 'William Miller' + sLineBreak + 
    'Adirondack Software and Graphics ' + sLineBreak + 'Email: [email protected]' 
    iParam := 'mailto:' + iEmail + '?subject=' + iSubject + '&Body=' + iBody; 
    ShellExecute(Form1.Handle, 'open', PChar(iParam), nil, nil, SW_SHOWNORMAL); 
end; 

ответ

6

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

Это, по сути, вызывает URL-адрес, только один с помощью схемы протокола mailto:. Таким образом, вам нужно закодировать url зарезервированные символы, такие как пробелы и разрывы строк. Возможно, вы не захотите использовать Indy для отправки почты, но вы можете использовать ее для кодирования ваших значений параметров, по крайней мере:

uses 
    ..., IdURI; 

iParam := 'mailto:' + iEmail + '?subject=' + TIdURI.ParamsEncode(iSubject) + '&Body=' + TIdURI.ParamsEncode(iBody); 
+0

Спасибо, Реми ... ваше предложение отлично работает. – Bill

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

  • Нет связанных вопросов^_^