Delphi环境中,用jmail实现邮件自动发送问题

Hamlit 2006-12-21 03:56:07
我试着用jmail公司写的邮件自动发动程序的Delphi实例发送一下邮件,Delphi编译器老是报出"容难性故障"的错误,不知道是为什么。现在要为网站做一个邮件自动发送的服务程序,因数据量大,不能用网络语言实现,正急着。。。
高手们请说明一下jmail在Delphi环境下的使用吧。如果不用jmail,又用什么呢?(最好能有源程序说明一下)。
...全文
425 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gangjh 2006-12-27
  • 打赏
  • 举报
回复
TIdSMTP不是有下面的屬性麼,沒測試.
userid=user
password=pass
AuthenticationType=atLogin
以前是自己寫socket的.
Rex_love_Burger 2006-12-27
  • 打赏
  • 举报
回复
mark
zczb 2006-12-26
  • 打赏
  • 举报
回复
等待高人……
Hamlit 2006-12-25
  • 打赏
  • 举报
回复
现在我用TIdSMTP控件了,已经可以通过tom.com发邮件。往下,还有Helo与smtp建立连接与用Base64编码用户名与密码这个难题。如果解决,就可直接对网易与hotmail等发邮件。
有朋友做过吗?如果做过,请给个提示吧
Hamlit 2006-12-25
  • 打赏
  • 举报
回复
谢谢!
gangjh 2006-12-23
  • 打赏
  • 举报
回复
我的代碼有點亂.
除去regex分離信息,與透過proxy部份,
發email的其實只有一小段
gangjh 2006-12-23
  • 打赏
  • 举报
回复
貼一段以前的老代碼給你參考一下吧,
我用來在console下發email的 .
2003年寫的. 寫得有點丑.但可以運行.
僅供參考,缺少控件,你可能無法編譯.

看看smtp RFC,發送郵件其實很簡單.
難點在於mime編碼與你的特殊需求.
unit AuthNMSMTP;

interface

uses
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 ;



implementation

uses 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.
zhengsq007 2006-12-22
  • 打赏
  • 举报
回复
你调用下outlook不行么。多简单
Hamlit 2006-12-22
  • 打赏
  • 举报
回复
郁闷,就没人愿意回答一下吗?
Hamlit 2006-12-21
  • 打赏
  • 举报
回复
好急,大家帮帮忙吧

1,594

社区成员

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

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