关于发送邮件的问题(50分)(50分)

  • 主题发起人 主题发起人 milan
  • 开始时间 开始时间
M

milan

Unregistered / Unconfirmed
GUEST, unregistred user!
发送邮件时,如用nmsmtp控件,则没有密码的检验。如用smtp.163.com发送,则有
authentication failed的问题。
请各位高手提供一些发送邮件时有用户身分确认和密码检验控件,或一些api函数。谢谢!
 
看看indy的例子,或者搜索一下站内的帖子。
 
能提供一些关于这方面的控件下载的网址或给一些源码吗?如sakemail等等。谢谢!!
 
//把如下的语句加入NMSMTP控件的OnConnect事件中即可。我在程序中一直是这么用的。
//下面的EncodeBase64是从Delphi中转来的,有修改一下,就是注释的那行,把times
//换成times-1,应当可以没有问题

if (MFSMTP->ReplyNumber == 250)
MFSMTP->Transaction("auth login");
if (MFSMTP->ReplyNumber == 334)
{
frmMainClient->StatusBar->Panels->Items[0]->Text = " 正在进行身份校验...";
MFSMTP->Transaction(EncodeBase64("用户名"));//你的Email帐号
MFSMTP->Transaction(EncodeBase64("密码"));//你的密码
}
if (MFSMTP->ReplyNumber == 235)
frmMainClient->StatusBar->Panels->Items[0]->Text = " 已连上邮件服务器";
else
frmMainClient->StatusBar->Panels->Items[0]->Text = " 密码校验失败";
Application->ProcessMessages();

//下面是EncodeBase64的实现
const AnsiString BaseTable =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
int FindInTable(char c)
{
return BaseTable.Pos(AnsiString(c)) - 1;
}
AnsiString EncodeBase64(AnsiString aSource)
{
int times;
int strlen;
char x1,x2,x3,x4;
short int xt;
AnsiString result("");

strlen = aSource.Length();
times = ((strlen % 3) == 0) ? (strlen / 3) : (strlen / 3 +1);
for (int i=0; i<times; i++) //如果是Delphi,好象是用for (int i;i<times-1;i++)
{
if (strlen >= (3 + i * 3))
{
x1 = BaseTable[int(aSource[1 + i *3] >> 2) + 1];
xt = int(aSource[1 + i *3] << 4) &amp; 48;
xt |= int(aSource[2 + i *3] >> 4);
x2 = BaseTable[xt + 1];
xt = int(aSource[2 + i *3] << 2) &amp; 60;
xt |= int(aSource[3 + i *3] >> 6);
x3 = BaseTable[xt + 1];
xt = int(aSource[3 + i *3]) &amp; 63;
x4 = BaseTable[xt + 1];
}
else if (strlen >= (2 + i * 3))
{
x1 = BaseTable[int(aSource[1 + i *3] >> 2) + 1];
xt = int(aSource[1 + i *3] << 4) &amp; 48;
xt |= int(aSource[2 + i *3] >> 4);
x2 = BaseTable[xt + 1];
xt = int(aSource[2 + i *3] << 2) &amp; 60;
x3 = BaseTable[xt + 1];
x4 = '=';
}
else
{
x1 = BaseTable[int(aSource[1 + i *3] >> 2) + 1];
xt = int(aSource[1 + i *3] << 4) &amp; 48;
x2 = BaseTable[xt + 1];
x3 = '=';
x4 = '=';
}
result += AnsiString(x1) + AnsiString(x2) + AnsiString(x3) + AnsiString(x4);
}
return result;
}
 
To demander:
请问有delphi的源文件吗?我看不懂encodebase64
 
假设我的邮箱是aaa.163.com,发邮件时进入163网站,先输入用户名:aaa,
再输入密码:111,进入自己的邮箱后发信。
请问各位高手,如何在程序中实现用户验证,输入用户名aaa和密码111,
通过smtp服务器(smtp.163.com)发信?
最好有delphi的源程序,谢谢!

问题解决后,再给300分。
 
多人接受答案了。
 
后退
顶部