我处于需要使用Thunderbird和Delphi XE3发送带附件的电子邮件的情况 我不知道从哪里开始,所以我问是否有人链接到我可能找到信息的网站。
答案 0 :(得分:5)
从文档中,您可以使用Thunderbird的command line options,因此我认为使用ShellExecute应该可行。我没试过这个。
ShellExecute(Handle, 'path\to\thunderbird.exe',
'-compose "to=foo@nowhere.net,attachment=''file:///c:/test.txt''",
nil, SW_SHOWNORMAL);
答案 1 :(得分:2)
以下代码基于以下两篇文章:
步骤:
在表单上放置一个FileListBox和一个按钮,并将FileListBox MultiSelect属性设置为true。 使用此代码将filelistbox中的选定条目传递给默认邮件应用程序。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FileCtrl;
type
TForm1 = class(TForm)
FileListBox1: TFileListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
uses
ActiveX, ShlObj, ComObj;
{$R *.dfm}
function GetFileListDataObject(const Directory: string; Files:
TStrings):
IDataObject;
type
PArrayOfPItemIDList = ^TArrayOfPItemIDList;
TArrayOfPItemIDList = array[0..0] of PItemIDList;
var
Malloc: IMalloc;
Root: IShellFolder;
FolderPidl: PItemIDList;
Folder: IShellFolder;
p: PArrayOfPItemIDList;
chEaten: ULONG;
dwAttributes: ULONG;
FileCount: Integer;
i: Integer;
begin
Result := nil;
if Files.Count = 0 then
Exit;
OleCheck(SHGetMalloc(Malloc));
OleCheck(SHGetDesktopFolder(Root));
OleCheck(Root.ParseDisplayName(0, nil,
PWideChar(WideString(Directory)),
chEaten, FolderPidl, dwAttributes));
try
OleCheck(Root.BindToObject(FolderPidl, nil, IShellFolder,
Pointer(Folder)));
FileCount := Files.Count;
p := AllocMem(SizeOf(PItemIDList) * FileCount);
try
for i := 0 to FileCount - 1 do
begin
OleCheck(Folder.ParseDisplayName(0, nil,
PWideChar(WideString(Files[i])), chEaten, p^[i],
dwAttributes));
end;
OleCheck(Folder.GetUIObjectOf(0, FileCount, p^[0], IDataObject,
nil,
Pointer(Result)));
finally
for i := 0 to FileCount - 1 do
begin
if p^[i] <> nil then
Malloc.Free(p^[i]);
end;
FreeMem(p);
end;
finally
Malloc.Free(FolderPidl);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SelFileList: TStrings;
I: Integer;
DataObject: IDataObject;
Effect: Integer;
CLSID_SendMail: TGUID;
DT: IDropTarget;
P: TPoint;
begin
CLSID_SendMail := StringToGUID('{9E56BE60-C50F-11CF-9A2C-00A0C90A90CE}');
with FileListBox1 do
begin
SelFileList := TStringList.Create;
try
SelFileList.Capacity := SelCount;
for i := 0 to FileListBox1.Items.Count - 1 do
if Selected[i] then
SelFileList.Add(Items[i]);
DataObject := GetFileListDataObject(Directory, SelFileList);
finally
SelFileList.Free;
end;
Effect := DROPEFFECT_NONE;
CoCreateInstance(CLSID_SendMail, nil, CLSCTX_ALL, IDropTarget, DT);
DT.DragEnter(DataObject, MK_LBUTTON, P, Effect);
DT.Drop(DataObject, MK_LBUTTON, P, Effect);
end;
end;
end.
(使用Delphi 2009测试)
我的原创博客文章:http://mikejustin.wordpress.com/2009/07/03/how-can-i-simulate-send-to-with-delphi/