实现邮件发送(delphi)

转载 2004年10月12日 17:32:00

nit Umain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Menus, Psock, NMsmtp, ExtCtrls, ComCtrls;
  const BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
type
  TForm1 = class(TForm)
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure NMSMTP1Connect(Sender: TObject);
    procedure NMSMTP1Failure(Sender: TObject);
    procedure NMSMTP1SendStart(Sender: TObject);
    procedure NMSMTP1Success(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  AuthSucc:boolean;// 是否需要密码验证
implementation

{$R *.dfm}

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.BitBtn1Click(Sender: TObject);
begin
  NMSMTP1.Host := edit1.Text;//邮件服务器主机名,发送邮件的服务器
  NMSMTP1.Port :=strtoint(edit6.Text);//SMTP端口号,缺省为25,POP3端口号为110
  NMSMTP1.UserID := edit11.Text;//用户标识
  NMSMTP1.PostMessage.FromName:=edit8.Text;//发送邮件主机名
  StatusBar1.Panels[1].Text:='正在连接邮件服务器!';
  if not NMSMTP1.Connected then NMSMTP1.Connect;//连接
  NMSMTP1.PostMessage.FromAddress :=edit7.Text;//发件人地址
  NMSMTP1.PostMessage.ToAddress.Text := edit2.Text;//收件人地址
  NMSMTP1.PostMessage.ToCarbonCopy.Text :=edit3.Text;//抄送
  NMSMTP1.PostMessage.Body.Text := memo1.Text;//邮件内容
  NMSMTP1.PostMessage.Subject := edit4.Text;//邮件标题
  if edit5.Text<>'' then
  NMSMTP1.PostMessage.Attachments.Add(edit5.Text);//邮件附件
  NMSMTP1.SendMail;//发送邮件
  showmessage('邮件发送成功!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
panel1.Visible:=false;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
panel1.Visible:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
panel1.Visible:=false;
end;

procedure TForm1.NMSMTP1Connect(Sender: TObject);
begin
  if nmsmtp1.ReplyNumber = 250 then
    nmsmtp1.Transaction('auth login'); //开始认证
  if nmsmtp1.ReplyNumber =334 then //输入用BASE64编码后的用户名
    begin
      if Length(edit9.Text)>0 then
      nmsmtp1.Transaction(EncodeBase64(edit9.Text));// 用户名
    end;
  if nmsmtp1.ReplyNumber =334 then  //输入用BASE64编码后的用户密码
    begin
      if Length(edit10.Text)>0 then
      nmsmtp1.Transaction(EncodeBase64(edit10.Text)); //密码
    end;
  if nmsmtp1.ReplyNumber =235 then
  begin
    AuthSucc:=true;
  end;
end;

procedure TForm1.NMSMTP1Failure(Sender: TObject);
begin
  StatusBar1.Panels[1].Text:='邮件发送失败!';
end;

procedure TForm1.NMSMTP1SendStart(Sender: TObject);
begin
  StatusBar1.Panels[1].Text:='邮件正在发送......';
end;

procedure TForm1.NMSMTP1Success(Sender: TObject);
begin
  StatusBar1.Panels[1].Text:='邮件发送成功!';
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if opendialog1.Execute then
   edit5.Text:=opendialog1.FileName;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if NMSMTP1.Connected then NMSMTP1.Disconnect;
Action:=cafree;
end;

end.

Delphi通过IdSmtp发送邮件的简单代码

var smtp: TIdSMTP; MgeSend: TIdMessage; procedure TForm1.Button1Click(Sender: TObject); begi...
  • chinajobs
  • chinajobs
  • 2016年05月25日 16:47
  • 2269

delphi 7邮件发送程序编写

delphi 7发送个邮件一般用到TIdSMTP与TIdMessage这两个组件,他们分别在Indy Clients和Indy Misc两个面板组件页内,或者通过菜单 View  -> Compone...
  • chinajobs
  • chinajobs
  • 2016年05月25日 14:25
  • 2968

delphi 实现 邮件发送(TidSMTP控件)

delphi 实现 邮件发送(TidSMTP控件) 新建一个delphi工程,添加 TidSMTP控件以及 TidMessage控件。 配置TidSMTP的相关属性: name = ...
  • harvardfeng
  • harvardfeng
  • 2013年02月21日 11:11
  • 979

Delphi发送邮件...

///首先在控件栏定位到:Indy Clients添加控件IdSMTP ///再定位到:Indy Misc添加控件IdMessage ///发送邮件函数 procedure TForm1.Send...
  • friendan
  • friendan
  • 2012年08月24日 21:11
  • 5165

使用spring实现邮件的发送(含测试,源码,注释)

此篇主要讲的是使用spring配置实现邮件发送,与之前的底层实现简便了不少,只需要几个配置就可以了,那么请往下看:    先写个接口 /** * @Title: IMailserdServi...
  • qq_34137397
  • qq_34137397
  • 2017年05月30日 23:49
  • 1023

java mail实现Email的发送,完整代码

1、对应用程序配置邮件会话javax.mail.Session保存邮件系统的配置属性和提供用户验证的信息,发送email首先要获取session对象。(1)Session.getInstance(ja...
  • karem
  • karem
  • 2009年10月09日 15:31
  • 62913

Delphi用Indy10实现smtp发送邮件支持附件

原先使用了第三方插件EASendMail SMTP Component来实现发送邮件,谁知道授权过期了,无奈只好求助于Indy,Google上翻阅了相关资料一番,发现现成的代码并不能满足我的需求,就在...
  • chinajobs
  • chinajobs
  • 2016年05月26日 14:11
  • 1588

用spring简单实现发送邮件

http://dfx306956205.iteye.com/blog/461443 http://blog.163.com/cdcxzw/blog/static/497684192009721959...
  • gundumw100
  • gundumw100
  • 2017年04月10日 17:33
  • 109

JavaMail实现邮件发送工具类

package org.nercita.bcp.util; import java.io.IOException; import java.util.Date; import java.util.P...
  • zmx729618
  • zmx729618
  • 2016年04月14日 17:17
  • 516

JavaMail实现简单的邮件发送功能

JavaMail实现简单的邮件发送功能
  • chenyuangege
  • chenyuangege
  • 2017年05月26日 09:37
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现邮件发送(delphi)
举报原因:
原因补充:

(最多只允许输入30个字)