[返回“一学网www.onestudy.net”首页]
计算机世界2000年第27期

批量发送电子邮件

西南民族学院数学系 王翠梅

  前几天读了《计算机世界》报的一篇文章“如何批量发送电子邮件”,写得较为详细,但用到了数据库,感觉不太利于别人“即拷即用”。现提出本人的邮件批发简易解决方案。

  首先准备一含多个邮件地址的文本文件,运行时将其内容装入一个listbox控件中,再利用Nmsmtp控件,给其UserID、Host、PostMessage的诸个属性赋值,用Listbox中的地址逐次给PostMessage的Toaddress赋值,从而达到一信多发的目的。

   具体控件使用情况及主要代码如下:

//---------------------
#include <vcl.h>
#pragma hdrstop

#include “main.h"
#include “options.h"
//---------------------
#pragma package(smart_init)
#pragma resource “*.dfm"
TForm1 *Form1;
//---------------------
_fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//--从地址列表中获取下一个Email address--
bool __fastcall TForm1::GetNext(char *AddTo)
{
  AnsiString AURL;
  if(id < ListBox1->Items->Count)
  {
    do{
      AURL = ListBox1->Items->Strings[id];
      ListBox1->ItemIndex = id;
      strcpy(AddTo, AURL.c_str());
      id ++;
    }while(!AddTo[0] && (id < ListBox1->Items->Count));
    if(id <= ListBox1->Items->Count)
      return true;
  }
  return false;
}
//--打开准备好的文本文件,将其中的内容载入
Listbox1中,并在memo中显示地址条目数-----
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char dp[100];
  if(OpenDialog1->Execute())
  {
 ListBox1->Items->LoadFromFile(OpenDialog1->FileName);
    Memo2->Lines->Clear();
    wsprintf(dp, “Total %i items", ListBox1->Items->Count);
    Memo2->Lines->Append(dp);
  }
}
//打开对话框编辑个人信息, 还可在此添加附件
void __fastcall TForm1::Button4Click(TObject *Sender)
{
  OptDlg->ShowModal();
}
//-------启动邮件发送,这里只发第一封。
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   NMSMTP1->UserID = OptDlg->Edit1->Text;
  给NMSMTP1的UserID属性赋值,表明将发信人User ID
NMSMTP1->Host = OptDlg->Edit2->Text;
  给NMSMTP1的Host属性赋值,标明邮件服务器
NMSMTP1->PostMessage->FromName = 
OptDlg->Edit3->Text;  提供给对方的发信人名
    NMSMTP1->PostMessage->FromAddress = 
OptDlg->Edit6->Text;  发信的Email地址
    NMSMTP1->PostMessage->LocalProgram = 
“BatSender";发信的程序名,存于信头的X Mailer 部分
  NMSMTP1->PostMessage->ReplyTo = OptDlg->
    Edit4->Text;  希望回复的地址
 NMSMTP1->PostMessage->Subject = OptDlg->Edit5->Text; 
 信件主题
    NMSMTP1->PostMessage->Body->Assign
(Memo1->Lines);   信件体 
    NMSMTP1->PostMessage->Attachments->
AddStrings(OptDlg->ListBox1->Items);  
载入文件名,这些文件作为附件发送。

  NMSMTP1->Connect(); //启动与服务器的连接

  stop = false;
  id = 0;
  SendMail();
}
//------用户按下stop按钮后,
调用此过程终止与远程服务器的连接-─
void __fastcall TForm1::Stop()
{
  if(NMSMTP1->Connected)
    NMSMTP1->Disconnect();
  stop = true;
}

//------执行邮件发送的有效代码----
void __fastcall TForm1::SendMail()
{
  char disp[100];
  char toadd[100];
  if(stop) return;
  if(GetNext(toadd))   
    获得待发送邮件的目标地址字符串
  {
    wsprintf(disp, “Preparing item %i", id);   
    Memo2->Lines->Append(disp);
NMSMTP1->PostMessage->ToAddress->
Text = toadd; 给目标地址属性赋值,
    NMSMTP1->SendMail();  开始发送邮件
  }
  else
    Stop();
}
 void __fastcall TForm1::NMSMTP1AuthenticationFailed
(bool &Handled)
{
  Stop();  
 // 若用户ID 无效,显示出错信息, 终止与远程服务器的连接
  Memo2->Lines->Append(“Invalid UerID");
}
//--以下皆为状态提示-----------
void __fastcall TForm1::NMSMTP1Connect(TObject *Sender)
{
  Memo2->Lines->Append(“Connected");
}
//---------------------
void __fastcall TForm1::NMSMTP1SendStart(TObject *Sender)
{
  Memo2->Lines->Append(“Sending");
}
//---------------------
void __fastcall TForm1::NMSMTP1Failure(TObject *Sender)
{
  Memo2->Lines->Append(“Message delivery failure");
  SendMail();  //发往上一地址失败,准备发往下一地址
}
//---------------------
void __fastcall TForm1::NMSMTP1Success(TObject *Sender)
{
  Memo2->Lines->Append(“Message sent successfully");
  SendMail();  //发往上一地址成功,准备发往下一地址
}
//---------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  Stop();
}
//---------------------
void __fastcall TForm1::NMSMTP1ConnectionFailed
(TObject *Sender)
{
  Memo2->Lines->Append(“Connection Failed");
}
//---------------------
void __fastcall TForm1::NMSMTP1Disconnect
(TObject *Sender)
{
  Memo2->Lines->Append(“Disconnected");
}
//---------------------
void __fastcall TForm1::NMSMTP1EncodeEnd
(AnsiString Filename)
{
  Memo2->Lines->Append(“Encoded "+Filename);
}
//---------------------
void __fastcall TForm1::NMSMTP1EncodeStart
(AnsiString Filename)
{
  Memo2->Lines->Append(“Encoding "+Filename);
}
//---------------------

  编程工具: C++ Builder 4 ;运行环境: Win98/Win95/Win NT。