我试着用jmail公司写的邮件自动发动程序的Delphi实例发送一下邮件,Delphi编译器老是报出"容难性故障"的错误,不知道是为什么。现在要为网站做一个邮件自动发送的服务程序,因数据量大,不能用网络语言实现,正急着
高手们请说明一下jmail在Delphi环境下的使用吧。如果不用jmail,又用什么呢?(最好能有源程序说明一下)。
高手们请说明一下jmail在Delphi环境下的使用吧。如果不用jmail,又用什么呢?(最好能有源程序说明一下)。
我用來在console下發email的 .
2003年寫的. 寫得有點丑.但可以運行.
僅供參考,缺少控件,你可能無法編譯.看看smtp RFC,發送郵件其實很簡單.
難點在於mime編碼與你的特殊需求.
unit AuthNMSMTP;interfaceuses
Classes,NMsmtp ,idGlobal, IdCoder3To4 ,idsmtp,blcksock,SysUtils;type
TAuthNMSMTP = class(TNMSMTP)
private
FPassword :String ;
FProxy: String;
FProxyPort: String;
FUseProxy :Boolean ;
FSocksBlockSocket : TSocksBlockSocket ;
protected
Procedure ConnectProxy() ;
procedure closeProxy() ;
public
property Password :String read FPassword write FPassword ;
property Proxy: String read FProxy write FProxy;
property ProxyPort: String read FProxyPort write FProxyPort; procedure Connect ; override ;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override ;
end ;implementationuses func;
constructor TAuthNMSMTP.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FUseProxy := False ;end;procedure TAuthNMSMTP.Connect;
begin
if length(Fproxy) >0 then begin
ConnectProxy ;
end else begin
inherited
end ;
if Length(Fpassword) >0 then begin
self.Transaction('EHLO') ;
self.Transaction('AUTH LOGIN');
self.Transaction(Base64Encode(Userid));
self.Transaction(Base64Encode(FPassword));
end ;
end;
procedure TAuthNMSMTP.ConnectProxy;
begin
FSocksBlockSocket := TSocksBlockSocket.Create ;
FSocksBlockSocket.SocksIP := Fproxy ;
FSocksBlockSocket.SocksPort := FProxyPort ;
FSocksBlockSocket.Connect(Host, IntToStr(Port));
if FsocksBlockSocket.SocksOpen then
dbugmsg('connect Proxy') ; self.ThisSocket := FSocksBlockSocket.Socket ;
self.FConnected :=true ;
self.FSocketWindow :=0 ;
FUseProxy :=true ;
end;procedure TAuthNMSMTP.closeProxy;
begin
self.ThisSocket := 0;
self.FConnected := False ; FSocksBlockSocket.CloseSocket ;
FSocksBlockSocket.Free ;
end;destructor TAuthNMSMTP.Destroy;
begin
if FuseProxy then
CloseProxy ;
inherited Destroy;
end;end.program mail;// programer :Gan Jian Hui
//
// Modify Date 2003-07-15
// Modify Date 2005-08-02
{$APPTYPE CONSOLE}{$R *.res}//type//type
// TNotifyEvent = procedure (Sender: TObject) ofobject;uses
SysUtils,
classes,
windows,
Variants,
regexpr,
U_main in 'U_main.pas',
func in '..\..\public\func.pas',
AuthNMSMTP in 'AuthNMSMTP.pas';const
cMail = 'MAIL' ;
cProxy = 'SOCKS_PROXY' ;
csubject = '-s' ;
cccaddr = '-c' ;
cbccaddr = '-b' ;
chelp = '-h' ;
cAttch = '-f' ;
cVersion = 'v' ;
var
sender : TAuthNMSMTP ;
mMail :String ;
mProxy :String ;
msubject,mtoaddr ,mccaddr,mbccaddr,mAttch :String ; mbody :String ;
Regexpr1 :TRegexpr ;{ Tsmail }
begin msubject := FindCmdLineStr( csubject );
mccaddr := FindCmdLineStr( cccaddr ) ;
mbccaddr := FindCmdLineStr( cbccaddr );
mAttch := FindCmdLineStr( cattch) ;
if FindCmdLineSwitch('-v',['-'],true) then Begin
showversion();
System.exit ;
end else if (paramcount() <= 0) or
FindCmdLineSwitch('h',['-'],true) then begin
usage() ;
System.exit ;
end ; mtoaddr :=paramstr(paramcount()) ; sender :=TAuthNMSMTP.Create(nil) ; mMail := GetEnvironmentVariable(cMail) ;
Regexpr1 := TRegexpr.Create ;
Regexpr1.Expression :='[smtp|imap]://(.*):(.*)@(.*)/' ; if RegExpr1.Exec(mMail) then begin
Sender.UserID := regExpr1.Substitute('$1') ;
sender.Password := regExpr1.Substitute('$2') ;
sender.Host := regExpr1.Substitute('$3') ;
end ;
{
writeln( Sender.UserID ) ;
writeln( Sender.Password ) ;
writeln( Sender.Host ) ;
}
mProxy := GetEnvironmentVariable(cProxy) ;
Regexpr1.Expression :='[socks]://(.*):(\d*)$' ;
if RegExpr1.Exec(mProxy) then begin
Sender.Proxy :=regExpr1.Substitute('$1') ;
Sender.ProxyPort := regExpr1.Substitute('$2') ;
writeln(Sender.Proxy);
writeln(Sender.ProxyPort);
end ;
Regexpr1.Free ; sender.Charset :='big5' ;
with sender.PostMessage do begin
Subject :=mSubject ; ToCarbonCopy.Append(mccaddr) ;
ToBlindCarbonCopy.Append(mbccaddr) ;
FromAddress :=mtoaddr ;
ToAddress.Append(mtoaddr) ;
if not (trim(mattch)='') then
Attachments.Append(mattch) ;
AssignFile(Input,'');
Reset(Input); while not eof(Input) do begin
readln(Input,mbody) ;
Body.Append(mbody) ;
end ; end ;
sender.Connect ;
if sender.Connected then begin
sender.SendMail ; ;
end ; sender.Disconnect ;
sender.Free ;end.
除去regex分離信息,與透過proxy部份,
發email的其實只有一小段
有朋友做过吗?如果做过,请给个提示吧
userid=user
password=pass
AuthenticationType=atLogin
以前是自己寫socket的.