而当我设置了Sender.Address,它就提示
You are not authorized to send mail as <MAIL FROM:<[email protected]>>,authentication is required.
You are not authorized to send mail as <MAIL FROM:<[email protected]>>,authentication is required.
解决方案 »
- 关于截获的WINDOWS消息怎么和我发送的消息不一样
- 用web Service 方式架構,在中間層isapi處聯接數據庫問題
- 关于数据更新,有没有更好的解决办法.
- 一个初学者的关于Midas的疑问
- 关于TADOStoredProc再问个问题
- 请求帮忙!!!!
- 如何实现每过一年数据库中的年龄字段自动加1
- 关于共用ADOCONNECTION,ADOQUERY,DATASOURCE连接数据库的问题,高手请进。
- 急急急急。出现了“connection is busy with result for another hstmt"
- 怎么读取:后的文字?比如edit1.text等于8:eight,我想让Edit2.text等于eight,不要冒号与前面的8,这要怎么编?
- 邮件群发
- 网吧游戏更新利器 V0.1(要源码的留信箱,要分的随便侃侃)
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Psock, NMsmtp, StdCtrls, Buttons;type
TForm1 = class(TForm)
NMSMTP1: TNMSMTP;
BitBtn1: TBitBtn;
TxtTo: TEdit;
Label1: TLabel;
TxtFrom: TEdit;
Label2: TLabel;
txtSmtpServer: TEdit;
Label3: TLabel;
txtPort: TEdit;
Label4: TLabel;
memContents: TMemo;
txtSubject: TEdit;
Label5: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure NMSMTP1Connect(Sender: TObject);
procedure NMSMTP1SendStart(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1; function EncodeString(Decoded:string):String;
function EncodeBASE64(Encoded: TMemoryStream {TMailText}; Decoded: TMemoryStream): Integer; //编码函数implementation{$R *.dfm}{对参数TMemoryStrema中的字节流进行Base64编码,编码后的结果
保存在Encoded中,函数返回编码长度}
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
begin
for K := 0 to 18 do
begin
L := 57*M + 3*K;
Stream[Quads+1] := _Code64[(B[L] div 4)+1];
Stream[Quads+2] := _Code64[(B[L] mod 4)*16 + (B[L+1] div 16)+1];
Stream[Quads+3] := _Code64[(B[L+1] mod 16)*4 + (B[L+2] div 64)+1];
Stream[Quads+4] := _Code64[B[L+2] mod 64+1];
Inc(Quads, 4);
if Quads = 76 then
begin
Stream[0] := #76;
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
Quads := 0;
end;
end;
end;
end; {对以2280为模的余数字节流进行编码}
J := (Decoded.Size mod 2280) div 3;
for I := 1 to J do
begin
Decoded.Read(B, 3);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + (B[1] div 16)+1];
Stream[Quads+3] := _Code64[(B[1] mod 16)*4 + (B[2] div 64)+1];
Stream[Quads+4] := _Code64[B[2] mod 64+1];
Inc(Quads, 4);
{每行76个字符}
if Quads = 76 then
begin
Stream[0] := #76;
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
Quads := 0;
end;
end;
{“=”补位}
if (Decoded.Size mod 3) = 2 then
begin
Decoded.Read(B, 2);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + (B[1] div 16)+1];
Stream[Quads+3] := _Code64[(B[1] mod 16)*4 + 1];
Stream[Quads+4] := '=';
Inc(Quads, 4);
end; if (Decoded.Size mod 3) = 1 then
begin
Decoded.Read(B, 1);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + 1];
Stream[Quads+3] := '=';
Stream[Quads+4] := '=';
Inc(Quads, 4);
end; Stream[0] := Chr(Quads);
if Quads > 0 then
begin
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
end; Result := Encoded.Size;
end;{对参数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;procedure TForm1.BitBtn1Click(Sender: TObject);
var
mmSwfFile,mmEncoded:TMemoryStream;
iResult : Integer;
strsTemp : TStrings;
strContents : TStringList;
i : Integer;
begin
{设置SMTP服务器地址、端口}
NMSMTP1.Host := txtSmtpServer.Text;
NMSMTP1.UserID := '你的帐号';
NMSMTP1.Port:=StrToInt(txtPort.Text);
{断开原来的连接,保证TForm1.NMSMTP1Connect中服务器认证的执行}
if NMSMTP1.Connected then NMSMTP1.Disconnect; {连接服务器}
NMSMTP1.Connect;
{创建流}
mmSwfFile := TMemoryStream.Create;
mmEncoded := TMemoryStream.Create;
{加载文件至流mmSwfFile}
mmSwfFile.LoadFromFile('C:\HIMEM.SYS');
{对mmSwfFile进行Base64编码,mmEncoded为编码后内容}
iResult := EncodeBASE64(mmEncoded,mmSwfFile);
strsTemp := TStringList.Create;
mmEncoded.Position:=0;
strsTemp.LoadFromStream(mmEncoded);
{----生成邮件内容----}
strContents:=TStringList.Create;
strContents.Add('--------------SwfEmail by JDH');
strContents.Add('Content-Type: text/html; charset=gb2312');
strContents.Add('Content-Transfer-Encoding: 8bit');
{注意:空行是邮件格式所必需的!}
strContents.Add('');
strContents.Add('<HTML><HEAD><TITLE>SWFEMAIL</TITLE></HEAD>');
strContents.Add('<BODY><font color=red>');
{添加邮件正文内容}
for i:=0 to memContents.Lines.Count-1 do
strContents.Add(memContents.Lines[i] + '');
strContents.Add('</font></BODY ></HTML>');{添加SWF文件相关内容}
{strContents.Add('< object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0">');
strContents.Add('< param name=movie value="cid:jdh_swfemail@001" >');
strContents.Add('< param name=quality value=high >');
strContents.Add('< embed src="cid:jdh_swfemail@001" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" >');
strContents.Add('< /embed>< /object >< /BODY >< /HTML >');
strContents.Add('');
strContents.Add('--------------SwfEmail by JDH');
strContents.Add('Content-Type: image/swf');
strContents.Add('Content-ID: < jdh_swfemail@001 >');
strContents.Add('Content-Transfer-Encoding: base64');
strContents.Add('Content-Disposition: inline; filename="'+ExtractFileName('C:\Himem.sys')+'"' );
strContents.Add('');
strContents.Add(strsTemp.Text);
strContents.Add('');}
{----生成邮件内容结束----}
{设置邮件发送信息}
NMSMTP1.PostMessage.FromAddress := txtFrom.Text;
NMSMTP1.PostMessage.FromName := txtFrom.Text;
NMSMTP1.PostMessage.ToAddress.Text := txtTo.Text;
NMSMTP1.PostMessage.Body.Text := strContents.Text;
NMSMTP1.PostMessage.Subject := txtSubject.Text;
{发送电子邮件}
NMSMTP1.SendMail;
ShowMessage('邮件发送成功!');
end;procedure TForm1.NMSMTP1Connect(Sender: TObject);
var
strUserName,strPassword:string;
begin
{如果SMTP服务器需要认证,则进行认证}
{对用户名和密码进行Base64编码}
strUserName:=EncodeString('邮箱用户名');
strPassword:=EncodeString('邮箱密码');
{进行认证,输入编码后的用户名、密码}
nmsmtp1.Transaction('auth login');
nmsmtp1.Transaction(strUserName);
nmsmtp1.Transaction(strPassword);
end;procedure TForm1.NMSMTP1SendStart(Sender: TObject);
begin
{在邮件发送开始时修改邮件的消息头,标明邮件为多部分组成}
NMSMTP1.FinalHeader.Values['Content-Type'] := 'multipart/related; boundary="------------SwfEmail by JDH"';
end;end.