网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
使用TNMSMTP控件在需认证服务器上发送邮件
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

前言:

  现在很多STMP服务器在发送邮件时均需重新认证一遍,而Delphi的TNMSMTP控件对它没有很“可视化”的支持,使很多人在开发过程中大打问号。

  由于前段时间在做《CSDN查询助手》的时候,使用的也是需认证的服务器(163.com)。从其它地方摘取了部分代码得以解决,现在此发布与大家共享。

实现:

1、在NMSMTP的OnConnect事件中添加代码:

var  strUserName, strPassword: String;
begin
  strUserName := EncodeString(''CoolSlob'');//CoolSlob是服务器的帐号
  strPassword := EncodeString(''Password'');//Password是密码
  {进行认证,输入编码后的用户名、密码}
  nmsmtp1.Transaction(''EHLO'') ;
  nmsmtp1.Transaction(''AUTH LOGIN'');
  nmsmtp1.Transaction(strUserName);
  nmsmtp1.Transaction(strPassword);
  StatusBar1.SimpleText := ''连接成功'';
end;

2、EncodeString函数实现过程:

{对参数Decoded字符串进行Base64编码,返回编码后的字符串}
function EncodeString(Decoded:string):String;
var
    mmTemp,mmDecoded:TMemoryStream;
    strTemp:TStrings;
begin
    mmTemp := TMemoryStream.Create;
    mmDecoded:=TMemoryStream.Create;
    strTemp:=TStringList.Create;
    strTemp.Add(Decoded);
    strTemp.SaveToStream(mmTemp);
    mmTemp.Position := 0;
    {剔除mmTemp从strTemp中带来的字符#13#10}
    mmDecoded.CopyFrom(mmTemp,mmTemp.Size-2);
    {对mmDecoded进行Base64编码,由mmTemp返回编码后的结果}
    EncodeBASE64(mmTemp,mmDecoded);
    {获得Base64编码后的字符串}
    mmTemp.Position:=0;
    strTemp.LoadFromStream(mmTemp);
    {返回结果必须从strTemp[0]中获得,如果使用strTemp.Text会
    带来不必要的字符#13#10}
    Result:=strTemp[0];
end;

3、EncodeBASE64函数实现过程:

function EncodeBASE64(Encoded: TMemoryStream ; Decoded: TMemoryStream): Integer;
const
    _Code64: String[64] =
        (''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'');
var
    I: LongInt;
    B: array[0..2279] of Byte;
    J, K, L, M, Quads: Integer;
    Stream: string[76];
    EncLine: String;
begin
    Encoded.Clear;
    Stream := '''';
    Quads := 0;
    {为提高效率,每2280字节流为一组进行编码}
    J := Decoded.Size div 2280;
    Decoded.Position := 0;
    {对前J*2280个字节流进行编码}
    for I := 1 to J do
    begin
        Decoded.Read(B, 2280);
        for M := 0 to 39 do
  &n
  • 下一篇资讯: 用delphi做flash播放器
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号