Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何在使用ShellExecute创建的电子邮件中包含换行符?_Delphi_Mailto_Delphi Xe7_Shellexecute - Fatal编程技术网

Delphi 如何在使用ShellExecute创建的电子邮件中包含换行符?

Delphi 如何在使用ShellExecute创建的电子邮件中包含换行符?,delphi,mailto,delphi-xe7,shellexecute,Delphi,Mailto,Delphi Xe7,Shellexecute,我可以使用ShellExecute成功发送电子邮件。收件人地址正确,发件人地址正确,主题正确。电子邮件的正文是正确的,只是没有任何换行符,所有内容都显示为一段没有换行符的段落。在我的情况下,默认的电子邮件客户端是Windows 8.1 mail 我的问题是,可以使用ShellExecute来保留换行符吗?我不希望直接与印地公司发送电子邮件。我所需要做的就是向默认的电子邮件客户端发送一封电子邮件,并将其正确格式化 procedure TForm1.Email1Click(Sender: TObje

我可以使用ShellExecute成功发送电子邮件。收件人地址正确,发件人地址正确,主题正确。电子邮件的正文是正确的,只是没有任何换行符,所有内容都显示为一段没有换行符的段落。在我的情况下,默认的电子邮件客户端是Windows 8.1 mail

我的问题是,可以使用ShellExecute来保留换行符吗?我不希望直接与印地公司发送电子邮件。我所需要做的就是向默认的电子邮件客户端发送一封电子邮件,并将其正确格式化

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: xxx@xxxxxxxx.xxx'
     iParam := 'mailto:' + iEmail + '?subject=' + iSubject + '&Body=' + iBody;
  ShellExecute(Form1.Handle, 'open', PChar(iParam), nil, nil, SW_SHOWNORMAL);
end;
程序TForm1.email1点击(发件人:TObject);
变量
iGridTableItem:TcxCustomGridTableItem;
iName、iDate、iEmail、iSubject、iBody、iParam:string;
开始
iGridTableItem:=cxGrid1DBTableView1.DataController。
GetItemByFieldName(“电子邮件”);
如果iGridTableItem.EditValue为null,则
iEmail:=iGridTableItem.EditValue;
iGridTableItem:=cxGrid1DBTableView1.DataController。
GetItemByFieldName(“名称”);
如果iGridTableItem.EditValue为null,则
iName:=iGridTableItem.EditValue;
iGridTableItem:=cxGrid1DBTableView1.DataController。
GetItemByFieldName(“日期”);
如果iGridTableItem.EditValue为null,则
iDate:=DateToStr(iGridTableItem.EditValue);
iSubject:=“ImageEn电子书”;
iBody:=“亲爱的先生”+iName+,“+sLineBreak+sLineBreak”+
'贝宝已通知我您在'+iDate'购买了xxxxx+
“+”谢谢您的购买。“+sLineBreak+sLineBreak+”您可以+
'在'+sLineBreak'下载xxx+
'http://www.xxxxx.xxx/xxx/EBook/xxx101.zip“+sLineBreak+
“致意”+sLineBreak+William Miller+sLineBreak+
“Adirondack软件和图形”+sLineBreak+“电子邮件:xxx@xxxxxxxx.xxx'
ipram:='mailto:'+iEmail+'?subject='+iSubject+'&Body='+iBody;
ShellExecute(Form1.Handle,'open',PChar(ipram),nil,nil,SW_SHOWNORMAL);
终止

不同的邮件应用程序以不同的方式支持
mailto
协议。并非所有应用程序都允许同时指定多个参数,等等。因此,在不同的机器上使用
mailto
发送电子邮件将非常不稳定

也就是说,您实际上是在调用一个URL,只有一个带有
mailto:
protocol方案的URL。因此,您需要对保留字符(如空格和换行符)进行url编码。您可能不想使用Indy发送邮件,但可以使用它对参数值进行编码,至少:

uses
  ..., IdURI;

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

不同的邮件应用程序以不同的方式支持
mailto
协议。并非所有应用程序都允许同时指定多个参数,等等。因此,在不同的机器上使用
mailto
发送电子邮件将非常不稳定

也就是说,您实际上是在调用一个URL,只有一个带有
mailto:
protocol方案的URL。因此,您需要对保留字符(如空格和换行符)进行url编码。您可能不想使用Indy发送邮件,但可以使用它对参数值进行编码,至少:

uses
  ..., IdURI;

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