邮件程序问题,高手请进!!!

qyluo 2002-11-05 11:39:56
我用delphi的NMSMTP控件做了一个发送邮件的程序,他的各种需要的属性我都在程序中进行了设置
并且程序可以连接到163,263的SMTP服务器,但是我在发送的时候,他报如下的错误:
'553 You are not authorized to send mail as ....,authentication is required'
各位大侠帮帮忙!!
...全文
40 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahpei 2002-11-05
  • 打赏
  • 举报
回复
qyluo(小罗子):
TNMSMTP不直接支持"SMTP服务器认证功能",但可以利用TNMSMTP的Connect事件和继承自TPowerSock的Transaction方法,实现SMTP服务器认证。
使用Transaction方法发出SMTP服务器认证所规定的AUTH LOGIN命令,并输入经过Base64编码后的用户名与密码,可以实现认证!
qyluo 2002-11-05
  • 打赏
  • 举报
回复
谢谢,我试试先!!!!!
qyluo 2002-11-05
  • 打赏
  • 举报
回复
有代码吗??
最好有代码啊!万分感谢啊!!!
killer2008 2002-11-05
  • 打赏
  • 举报
回复
//这是我写的一个演示程序,
//窗体上有一个BUTTON控件,一个LABEL控件,一个NMSMTP控件
//带密码险证的邮件发送程序需要BASE64编码,DecodeBase64和 EncodeBase64
//为解码和编码函数
//在263、163和SOHU上都能发送成功




unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Psock, NMsmtp, ComCtrls;

type
TForm1 = class(TForm)
NMSMTP1: TNMSMTP;
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure NMSMTP1Connect(Sender: TObject);
procedure NMSMTP1InvalidHost(var Handled: Boolean);
procedure NMSMTP1ConnectionFailed(Sender: TObject);
procedure NMSMTP1Status(Sender: TComponent; Status: String);
procedure NMSMTP1SendStart(Sender: TObject);
procedure NMSMTP1Success(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//BaseTable为BASE64码表
const BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

var
Form1: TForm1;
AuthSucc:boolean;// 是否需要密码验证
function DecodeBase64(Source:string):string; //解码函数
function FindInTable(CSource:char):integer; //
function EncodeBase64(Source:string):string; //编码函数
implementation

{$R *.DFM}
//
function FindInTable(CSource:char):integer;
begin
result:=Pos(string(CSource),BaseTable)-1;
end;
////
function DecodeBase64(Source:string):string;
var
SrcLen,Times,i:integer;
x1,x2,x3,x4,xt:byte;
begin
result:='';
SrcLen:=Length(Source);
Times:=SrcLen div 4;
for i:=0 to Times-1 do
begin
x1:=FindInTable(Source[1+i*4]);
x2:=FindInTable(Source[2+i*4]);
x3:=FindInTable(Source[3+i*4]);
x4:=FindInTable(Source[4+i*4]);
x1:=x1 shl 2;
xt:=x2 shr 4;
x1:=x1 or xt;
x2:=x2 shl 4;
result:=result+chr(x1);
if x3= 64 then break;
xt:=x3 shr 2;
x2:=x2 or xt;
x3:=x3 shl 6;
result:=result+chr(x2);
if x4=64 then break;
x3:=x3 or x4;
result:=result+chr(x3);
end;
end;
/////
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;
//////////
procedure TForm1.Button1Click(Sender: TObject);
var MailTo,MailBody:TStringList;
begin
Nmsmtp1.Host :='smtp.sohu.com';
nmsmtp1.Port :=25;
nmsmtp1.UserID :='scswzzb';//发信人的用户名,必须是真实的
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
nmsmtp1.Connect ; ///连接
if AuthSucc=true then ////验证成功
begin
MailTo:=TStringList.Create;
Mailbody:=TStringList.Create;
MailTo.Add('ylsc@263.net');
MailBody.Add('Hello it is a test');
nmsmtp1.PostMessage.FromAddress:='scswzzb@sohu.com'; //发信人的电子邮件地址
nmsmtp1.PostMessage.ToAddress :=MailTo;
nmsmtp1.PostMessage.Body:=MailBody;
nmsmtp1.PostMessage.Subject :='My test';
Mailto.Clear ;
//Mailto.Add('c:\a.txt');
//Mailto.Add('c:\b.txt');
//nmsmtp1.PostMessage.Attachments:=MailTo; 附件
MailTo.Free ;
MailBody.Free;
nmsmtp1.SendMail;
end;
end;
procedure TForm1.NMSMTP1Connect(Sender: TObject);
begin
//////连接成功,下面用户认证过程
label1.caption:=nmsmtp1.Status;
if nmsmtp1.ReplyNumber = 250 then
label1.caption:=nmsmtp1.Transaction('auth login'); //开始认证
if nmsmtp1.ReplyNumber =334 then //返回值为334,让你输入用BASE64编码后的用户名
label1.caption:=nmsmtp1.Transaction(EncodeBase64('scswzzb'));// 用户名aaaaa
if nmsmtp1.ReplyNumber =334 then // 返回值为334,让你输入用BASE64编码后的用户密码
label1.caption:=nmsmtp1.Transaction(EncodeBase64('12345')); //密码为123456
if nmsmtp1.ReplyNumber =235 then
begin
label1.caption:='successful';
AuthSucc:=true;
end;
//showmessage(label1.caption);
end;

procedure TForm1.NMSMTP1InvalidHost(var Handled: Boolean);
begin
label1.caption :='Invalid Host';
end;

procedure TForm1.NMSMTP1ConnectionFailed(Sender: TObject);
begin
label1.caption :='connect failed';
end;

procedure TForm1.NMSMTP1Status(Sender: TComponent; Status: String);
begin
label1.caption :=nmsmtp1.Status ;
end;

procedure TForm1.NMSMTP1SendStart(Sender: TObject);
begin
label1.Caption :='start send';
end;

procedure TForm1.NMSMTP1Success(Sender: TObject);
begin
label1.Caption:='send success!';
end;
end.
qyluo 2002-11-05
  • 打赏
  • 举报
回复
再说一次嘛!!!
ahpei 2002-11-05
  • 打赏
  • 举报
回复
在连接时你需要发送服务器身份认证指令以及用户名与密码.
使用NMSMTP可以做到。
daniel007 2002-11-05
  • 打赏
  • 举报
回复
那是你发送的邮件服务器要求发送时也要认证身份造成的,去搜搜以前的帖子,我记得回答过类似的问题
ahpei 2002-11-05
  • 打赏
  • 举报
回复
服务器身份认证
qyluo 2002-11-05
  • 打赏
  • 举报
回复
不明白,可否说得更清楚一点,我应该怎么做呢!?
ahpei 2002-11-05
  • 打赏
  • 举报
回复
服务器安全认证!
谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分四卷压缩,请都下载完再解压! Java高手真经 高级编程篇 下载(一) http://download.csdn.net/source/3275208 Java高手真经 高级编程篇 下载(二) http://download.csdn.net/source/3275230 Java高手真经 高级编程篇 下载(三) http://download.csdn.net/source/3275245 Java高手真经 高级编程篇 下载(四) http://download.csdn.net/source/3275262 本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。讲解的主要内容包括如下。   Java Web企业级开发技术EJB:包括会话Bean、消息驱动Bean、实体Bean、拦截器、依赖注入、定时器、JPA持久化、JPQL查询语言。   Java Web分布式开发技术:包括JTA事务管理、JAAS验证与授权服务、JNDI命名和目录服务、JMS消息服务、JavaMail邮件服务、WebService、JMX管理、JCA连接器。   Java Web开源技术与框架:包括工作流、规则引擎、搜索引擎、缓存引擎、任务调度、身份认证、报表服务、系统测试、集群与负载均衡。   随书附赠光盘内容为本书各种原型包、系统源程序。本书内容循序渐进,通俗易懂,覆盖了Java Web高级开发的各种技术。无论对于Java软件设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。   本书适合作为Java相关培训机构的教材,也可作为Java自学人员的参考手册。
谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分四卷压缩,请都下载完再解压! Java高手真经 高级编程篇 下载(一) http://download.csdn.net/source/3275208 Java高手真经 高级编程篇 下载(二) http://download.csdn.net/source/3275230 Java高手真经 高级编程篇 下载(三) http://download.csdn.net/source/3275245 Java高手真经 高级编程篇 下载(四) http://download.csdn.net/source/3275262 本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。讲解的主要内容包括如下。   Java Web企业级开发技术EJB:包括会话Bean、消息驱动Bean、实体Bean、拦截器、依赖注入、定时器、JPA持久化、JPQL查询语言。   Java Web分布式开发技术:包括JTA事务管理、JAAS验证与授权服务、JNDI命名和目录服务、JMS消息服务、JavaMail邮件服务、WebService、JMX管理、JCA连接器。   Java Web开源技术与框架:包括工作流、规则引擎、搜索引擎、缓存引擎、任务调度、身份认证、报表服务、系统测试、集群与负载均衡。   随书附赠光盘内容为本书各种原型包、系统源程序。本书内容循序渐进,通俗易懂,覆盖了Java Web高级开发的各种技术。无论对于Java软件设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。   本书适合作为Java相关培训机构的教材,也可作为Java自学人员的参考手册。
谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分四卷压缩,请都下载完再解压! Java高手真经 高级编程篇 下载(一) http://download.csdn.net/source/3275208 Java高手真经 高级编程篇 下载(二) http://download.csdn.net/source/3275230 Java高手真经 高级编程篇 下载(三) http://download.csdn.net/source/3275245 Java高手真经 高级编程篇 下载(四) http://download.csdn.net/source/3275262 本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。讲解的主要内容包括如下。   Java Web企业级开发技术EJB:包括会话Bean、消息驱动Bean、实体Bean、拦截器、依赖注入、定时器、JPA持久化、JPQL查询语言。   Java Web分布式开发技术:包括JTA事务管理、JAAS验证与授权服务、JNDI命名和目录服务、JMS消息服务、JavaMail邮件服务、WebService、JMX管理、JCA连接器。   Java Web开源技术与框架:包括工作流、规则引擎、搜索引擎、缓存引擎、任务调度、身份认证、报表服务、系统测试、集群与负载均衡。   随书附赠光盘内容为本书各种原型包、系统源程序。本书内容循序渐进,通俗易懂,覆盖了Java Web高级开发的各种技术。无论对于Java软件设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。   本书适合作为Java相关培训机构的教材,也可作为Java自学人员的参考手册。
谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分四卷压缩,请都下载完再解压! Java高手真经 高级编程篇 下载(一) http://download.csdn.net/source/3275208 Java高手真经 高级编程篇 下载(二) http://download.csdn.net/source/3275230 Java高手真经 高级编程篇 下载(三) http://download.csdn.net/source/3275245 Java高手真经 高级编程篇 下载(四) http://download.csdn.net/source/3275262 本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。讲解的主要内容包括如下。   Java Web企业级开发技术EJB:包括会话Bean、消息驱动Bean、实体Bean、拦截器、依赖注入、定时器、JPA持久化、JPQL查询语言。   Java Web分布式开发技术:包括JTA事务管理、JAAS验证与授权服务、JNDI命名和目录服务、JMS消息服务、JavaMail邮件服务、WebService、JMX管理、JCA连接器。   Java Web开源技术与框架:包括工作流、规则引擎、搜索引擎、缓存引擎、任务调度、身份认证、报表服务、系统测试、集群与负载均衡。   随书附赠光盘内容为本书各种原型包、系统源程序。本书内容循序渐进,通俗易懂,覆盖了Java Web高级开发的各种技术。无论对于Java软件设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。   本书适合作为Java相关培训机构的教材,也可作为Java自学人员的参考手册。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧