在Delphi中使用indy SMTP发送gmail邮件

在Delphi中发送email很简单,发送ssl方式的gmail邮件也很简单,只要在使用的idSMTP上附加一个TIdSSLIOHandlerSocket 就可以了。
使用控件

  1. procedure sendMail(sToMail, sSubject, sContent: String);
  2. var
  3.     SMTP: TIdSMTP;
  4.     MailMessage: TIdMessage;
  5.     SSLSocket: TIdSSLIOHandlerSocket;
  6. begin
  7.   SMTP        := TIdSMTP.Create(nil);
  8.   SSLSocket := TIdSSLIOHandlerSocket.Create(nil);
  9.   MailMessage:= TIdMessage.Create(nil);
  10.  
  11.   SMTP.IOHandler := SSLSocket;
  12.   SMTP.Port   := 465;
  13.   SMTP.Host := 'smtp.gmail.com';
  14.   SMTP.AuthenticationType  := atLogin;
  15.  
  16.   smtp.UserName     := 'SunnyYu2000';
  17.   smtp.Password      := 'xxxxxx';
  18.  
  19.   // 设置邮件的信息
  20.   MailMessage.From.Address := 'SunnyYu2000@gmail.com';
  21.   MailMessage.Recipients.EMailAddresses := sToMail;
  22.   MailMessage.Subject := sSubject;  
  23.   MailMessage.Body.Text := sContent;
  24.  
  25.   //发送邮件
  26.   try
  27.     try
  28.       SMTP.Connect(1000);
  29.       SMTP.Send(MailMessage);
  30.       ShowMessage('发送成功');
  31.     except on E:Exception do
  32.       ShowMessage('发送失败: ' + E.Message);
  33.     end;
  34.   finally
  35.     if SMTP.Connected then
  36.       SMTP.Disconnect;
  37.   end;
  38.  
  39.   MailMessage.Free;
  40.   SSLSocket.Free;
  41.   SMTP.Free;
  42. end;

编译后需要SSL动态库支持,支持库可以到Indy网站上下载到。
如果需要发送附件,可以再发送前添加如下类似代码

  1.    // 添加邮件的附件
  2.    TIdAttachment.Create(MailMessage.MessageParts, sAttachmentFileName);

————–
Indy需要的SSL支持dll下载地址 http://www.indyproject.org/Sockets/SSL.EN.aspx

Popularity: 32% [?]

Related

一个并行压缩的工具zipmt

随着数据的积累,被备份的文件也越来越大,通常都是采用linux自带的压缩工具进行压缩备份。今天发现一个并行压缩的工具zipmt,可以充分利用机器上的cpu来并行压缩,减少压缩时间。
压缩方法

Usage:
  zipmt [OPTION...]  - muti threaded bzip2 compression utility

   - The name of the file to compress or just use “-” to indicate
        stdandard input.

Help Options:
  -?, –help        Show help options

Application Options:
  -t, –threads     The number of threads to use.
  -v, –verbose     Show Progress
  -o, –outfile     The name of an output file to write to
  -c, –stdout      Write data to standard out
  -s, –stream      Compress using the stream method

压缩时主要注意要用 -t n选项指定用来并行压缩的线程数量(一般和机器上安装的cpu数量对应),根据这个参数的设定以及机器实际的cpu数量,一般压缩时间会缩短到约为原先的 1/n 时间。

解压方式
zipmt不提供解压功能,需要用 bunzip2 来解压。

Popularity: 27% [?]

Random Posts

编译安装fastcgi++库

fastcgipp官方网站下载最新的fastcgi++-2.0alpha-81f89e4e.tar.bz2,

  1. tar -xjvf fastcgi++-2.0alpha-81f89e4e.tar.bz2
  2. cd fastcgi++-2.0alpha-81f89e4e
  3. ./configure
  4. ./make
  5. ./make install

该fastcgi++库完全使用c++编写,依赖boost库(要求>1.35),所以安装时需要先安装boost库。
编译过程中碰到问题 mysql_set_character_set 找不到问题,修改 src/mysql.cpp 文件,将如下两行注释掉

  1.         //if(mysql_set_character_set(&connection, charset))
  2.         //      throw Error(&connection);

再次编译通过。
安装后include头文件被拷贝到 /usr/local/include/fastcgi++/,库文件被拷贝到 /usr/local/lib/fastcgipp.a

编译examples目录下测试用的fastcgi应用,验证编译安装的正常性。
使用默认的 make examples 没有编译通过。打开Makefile文件,发现缺少对 boost库的引用,将其添加上,再次编译,通过。

  1. FASTCGIPP_INCLUDE=/usr/local/include/fastcgi++
  2. BOOST_INCLUDE=/usr/local/include/boost-1_39
  3. BOOST_CPPFLAG=-I$(BOOST_INCLUDE) -pthread
  4. BOOST_THREADLIB=-lboost_thread-gcc34-mt-1_39 -pthread
  5.  
  6. pkgConfigLibs=-lfastcgipp -lboost_thread -lmysqlclient
  7. CXX=g++
  8. CXXFLAG= -g -O2
  9.  
  10. database.fcgi: database.cpp
  11.         $(CXX) -o database.fcgi database.cpp -I$(FASTCGIPP_INCLUDE) $(pkgConfigLibs) $(BOOST_CPPFLAGS) $
  12. (CXXFLAGS) $(BOOST_THREAD_LIBS)
  13.  
  14. clean:
  15.         rm -f *.fcgi

—————-
默认Makefile编译不通过的原因
1. 缺少对boost库的目录include引用
2. 缺少boost线程库的应用,默认使用的是-lboost_thread 需要为-lboost_thread-gcc34-mt-1_39 -pthread

Popularity: 48% [?]

Random Posts

编译安装BOOST库

boost官方网站上下载最新的1.39版boost库。

  1. tar -xjvf boost_1_39_0.tar.bz2
  2. cd boost_1_39_0
  3. ./bootstrap.sh
  4. ./bjam -install

耐性等待编译安装,偶等了2个多小时。boost库的include头文件会被安装到 /usr/local/include/boost-1_39 下。库文件会被安装到 /usr/lib 目录下。

编译简单的测试程序。

  1. #include <boost/lexical_cast.hpp>
  2. #include <iostream>
  3. int main()
  4. {
  5.    using boost::lexical_cast;
  6.     int a = lexical_cast<int>("123456");
  7.     double b = lexical_cast<double>("123.456");
  8.     std::cout<<a<<std::endl;
  9.     std::cout<<b<<std::endl;
  10.     return 0;
  11. }

编写一个简单的Makefile文件

  1. BOOST_INCLUDE=/usr/local/include/boost-1.39
  2. BOOST_ROOT=/usr/local/src/boost_1_39_0
  3. BOOST_LIB=/usr/local/lib
  4.  
  5. CXX=g++
  6.  
  7. test: test.cpp
  8.         $(CXX) -o test test.cpp -I$(BOOST_INCLUDE)
  9. clean:
  10.         rm -rf test

进行编译

  1. make test

执行test程序可以看到输出结果.

123456
123.456

boost库安装确认通过。
————–
编译时可能需要导入的一些库引用

  1. #使用regex
  2. -lboost_regex-gcc
  3. #使用thread
  4. -lboost_thread -pthread

Popularity: 30% [?]

Random Posts