群发邮件的问题.(200分)

  • 主题发起人 主题发起人 新来的
  • 开始时间 开始时间

新来的

Unregistered / Unconfirmed
GUEST, unregistred user!
我打算用SakeMail写一个群发邮件的程序.发生下列问题:
1、有时候成功,有时候不成功,主要是主机名称的问题(有些主机成功,
有些不成功)。
2、怎么实现群发,最好有例程!
 
用现成软件
 
我前两天研究了一下
如果直接用暗送的话,邮件头里还是可以看到原发送人的
只有直接用smtp的多个rcpt指令,参考rfc
大富翁旧资料里也有
 
你用什么smtp服务器的呢??听说现在好多smtp服务器已经限制了你的发信的线程了啊..
它可能不让你用这么一个帐号在很短时间内发很多信的.....建议你先使用一些邮件服
务器设置在自己机器上试验一下再说,成功了就说明你的程序没有问题...
 
转贴:NMSMTP的密码认证解决方案
const
BaseTable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

function EncodeBase64(Source:string):string;
var
Times, LenSrc, i: Integer;
x1, x2, x3, x4: Char;
xt: Byte;
begin
Result := '';
LenSrc := Length(Source);
if LenSrc mod 3 = 0 then
Times := LenSrc div 3
else
Times := LenSrc div 3 + 1;
for i := 0 to Times - 1 do
begin
if LenSrc >= (3 + i * 3) then
begin
x1 := BaseTable[(ord(Source[1 + i * 3]) shr 2)+1];
xt := (ord(Source[1 + i * 3]) shl 4) and 48;
xt := xt or (ord(Source[2 + i * 3]) shr 4);
x2 := BaseTable[xt + 1];
xt := (Ord(Source[2 + i * 3]) shl 2) and 60;
xt := xt or (Ord(Source[3 + i * 3]) shr 6);
x3 := BaseTable[xt + 1];
xt := (ord(Source[3 + i * 3]) and 63);
x4 := BaseTable[xt + 1];
end
else if LenSrc >= (2 + i * 3) then
begin
x1 := BaseTable[(Ord(Source[1 + i * 3]) shr 2) + 1];
xt := (Ord(Source[1 + i * 3]) shl 4) and 48;
xt := xt or (Ord(Source[2 + i * 3]) shr 4);
x2 := BaseTable[xt + 1];
xt := (Ord(Source[2 + i * 3]) shl 2) and 60;
x3 := BaseTable[xt + 1];
x4 := '=';
end else
begin
x1 := BaseTable[(Ord(Source[1 + i * 3]) shr 2)+1];
xt := (Ord(Source[1 + i * 3]) shl 4) and 48;
x2 := BaseTable[xt + 1];
x3 := '=';
x4 := '=';
end;
Result := Result + x1 + x2 + x3 + x4;
end;
end;

在SMTP.OnConnect事件中写身份验证.
procedure TSendFile.NMSMTPConnect(Sender: TObject);
begin {身份验证}
if FSMTP.ReplyNumber = 250 then
FSMTP.Transaction('auth login');
if FSMTP.ReplyNumber = 334 then
begin
FSMTP.Transaction(EncodeBase64(FUserID));
FSMTP.Transaction(EncodeBase64(FPassword));
end;
end;
 
谢谢各位了!
 
后退
顶部