电子邮件的问题(100分)

  • 主题发起人 主题发起人 宝贝猫
  • 开始时间 开始时间

宝贝猫

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个字段是保存EMAIL的,现在我想做邮件群发的功能,有几个问题,请大家帮忙:
1、如何调用系统默认的电邮系统?
2、如何将字段中的EMIAL地址加入到“收件人”中?
3、如何将文档加入到“附件”中?
 
附件不知怎么加!其它的如下:
uses ShellAPI;

email1:='111@163.net';
email2:='222@163.net';
ShellExecute(0, nil, PChar('mailto:' + email1 + ';' + email2 + '?subject=测试邮件'), nil, nil, SW_SHOWNORMAL);
 
很久没上来了,,,哈哈,

不知道你用的DELPHI版本是多少?

我以前帮别人做了一个后台自动发邮件的东西,,至于调用默认的邮件客户端,就是用COOLQIANG列出的用shellexecute来直接执行“mailto”,其实这个语句你可以直接在浏览器的地址栏中直接输入的,,

而添加邮件主体,,就是BODY的东西,,你就把数据库中的邮件内容取出来,,赋给IDMESSAGE控件的BODY属性就是了,而附件,,则是在ATAACHMENTS里吧(记不清了),要用ADD方法加进去,,其参数是附件的完整地址,而接收者,是在RECIPIENTS里的吧,因为我现在在出差,,机器里没有DELPHI,要2~3天后才回得去成都,,可以发个例子给你,,如果是用的DELPHI6,这些都是在SMTP控件的属性中,都用ADD方法添加,邮件内容是BODY,附件是ATTACHMENT里,,,

自我感觉发邮件不难,,还是比较简单的,,如果你自己要钻一下DELPHI带的帮助,要不了多久你豆会了,
 
同意 coolqiang
 
宝贝猫:下面这个函数帮你搞定你所有的问题:

FUNCTION SendEMail(Handle : THandle; Mail : TStrings):Cardinal;
TYPE
TAttachAccessArray = ARRAY [0..0] OF TMapiFileDesc;
PAttachAccessArray = ^TAttachAccessArray;
VAR
MapiMessage : TMapiMessage;
Receip : TMapiRecipDesc;
Attachments : PAttachAccessArray;
AttachCount : INTEGER;
iCount : INTEGER;
FileName : STRING;
BEGIN
fillChar(MapiMessage, SizeOf(MapiMessage), #0);
Attachments := NIL;
fillChar(Receip,SizeOf(Receip), #0);
IF Mail.Values['to'] <> ''
THEN
BEGIN
Receip.ulReserved := 0;
Receip.ulRecipClass := MAPI_TO;
Receip.lpszName := StrNew(PChar(Mail.Values['to']));
Receip.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['to']));
Receip.ulEIDSize := 0;
MapiMessage.nRecipCount := 1;
MapiMessage.lpRecips := @Receip;
END;
AttachCount := 0;
FOR iCount := 0 TO MaxInt
DO
BEGIN
IF Mail.Values['attachment' + IntToStr(iCount)] = ''
THEN
BREAK;
AttachCount := AttachCount + 1;
END;
IF AttachCount > 0
THEN
BEGIN
GetMem(Attachments,SizeOf(TMapiFileDesc) * AttachCount);
FOR iCount := 0 TO (AttachCount - 1)
DO
BEGIN
FileName := Mail.Values['attachment' + IntToStr(iCount)];
Attachments[iCount].ulReserved := 0;
Attachments[iCount].flFlags := 0;
Attachments[iCount].nPosition := ULONG($FFFFFFFF);
Attachments[iCount].lpszPathName := StrNew(PChar(FileName));
Attachments[iCount].lpszFileName := StrNew(PChar(ExtractFileName(FileName)));
Attachments[iCount].lpFileType := NIL;
END;
MapiMessage.nFileCount := AttachCount;
MapiMessage.lpFiles := @Attachments^;
END;

IF Mail.Values['subject'] <> ''
THEN
MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject']));
IF Mail.Values['body'] <> ''
THEN
MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body']));

Result := MapiSendMail(0, Handle, MapiMessage,MAPI_DIALOG*Ord(Handle <> 0) OR MAPI_LOGON_UI OR MAPI_NEW_SESSION, 0);

FOR iCount := 0 TO (AttachCount - 1)
DO
BEGIN
strDispose(Attachments[iCount].lpszPathName);
strDispose(Attachments[iCount].lpszFileName);
END;

IF assigned(MapiMessage.lpszSubject)
THEN
strDispose(MapiMessage.lpszSubject);
IF assigned(MapiMessage.lpszNoteText)
THEN
strDispose(MapiMessage.lpszNoteText);
IF assigned(Receip.lpszAddress)
THEN
strDispose(Receip.lpszAddress);
IF assigned(Receip.lpszName)
THEN
strDispose(Receip.lpszName);
END;
 
非常感谢各位大侠的帮助,小猫在这里先谢过了。

to: HeyTommy
我用的是DELPHI6,如果您有实例,麻烦您发给我:cly_ly@163.net

to:iseek
您提供的函数因为没有说明,我刚学DELPHI,得慢慢看,不过还是谢谢您了。
 
多人接受答案了。
 
>>to:iseek
>>您提供的函数因为没有说明,我刚学DELPHI,得慢慢看,不过还是谢谢您了。

晕!
你完全可以不必看上面的那个函数,直接这样用就可以了:
sendEMail(Application.Handle, mail);
只要注意参数mail是TStringList就可以了.
另外,使用这个函数,要在uses里加mapi单元.
 
后退
顶部