找回密码
 加入
搜索
查看: 20892|回复: 28

[网络通信] 用AU3如何通过163的SMTP发邮件?

 火... [复制链接]
发表于 2009-4-29 10:27:12 | 显示全部楼层 |阅读模式
本帖最后由 dr85 于 2009-4-29 11:11 编辑

代码如下,无法发送。显示错误代码2
#include <SmtpMailer.au3>
        $ping = ping("192.168.1.1", 10)
        If Not $ping Then
                sendmail()
        EndIf
Func sendmail()
        $s_SmtpServer = "smtp.163.com" ;SMTP服务器
        $s_FromName = "qinjun" ;邮件发送人
        $s_FromAddress = "username@163.com" ;邮件发送者地址
        $s_ToAddress = "55555@163.com" ;收件人地址
        $s_Subject = "网关出错了!" ;邮件标题
        $as_Body = ""  ;邮件正文
        $s_AttachFiles = "" ;附件地址
        $s_CcAddress = "" ;抄送地址
        $s_BccAddress = "" ;密件抄送地址
        $s_Username = "username" ;用户名
        $s_Password = "password" ;密码
        $IPPort = 25 ;发送端口,Gmail使用的发送端口为465
        $ssl = 0

        Global $oMyRet[2]
        Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
        $rc = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
        If @error Then
                MsgBox(0, "邮件发送失败", "错误代号:" & @error & "    描述:" & $rc)
        EndIf
EndFunc   ;==>sendmail
SmtpMailer.au3内容如下:
#Include <file.au3>
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
;~ $rc = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
;~ If @error Then
;~    MsgBox(0, "Error sending message", "Error code:" & @error & "    Description:" & $rc)
;~ EndIf
;

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment ($S_Files2Attach[$x])
            Else
                $i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
                SetError(1)
                return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $Ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
;Update settings
    $objEmail.Configuration.Fields.Update
; Sent the Message
    $objEmail.Send
    if @error then
        SetError(2)
        return $oMyRet[1]
    EndIf
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description,3)
    ConsoleWrite("### COM Error !    Number: " & $HexNumber & "    ScriptLine: " & $oMyError.scriptline & "    Description:" & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
EndFunc ;==>MyErrFunc

评分

参与人数 1金钱 +16 收起 理由
guoguo188 + 16 很给力! 这个可以改端口 25端口云服务器不.

查看全部评分

 楼主| 发表于 2009-4-29 11:10:43 | 显示全部楼层
问题已经解决了。
$s_SmtpServer = "smtp.163.com" ;SMTP服务器
$s_FromName = "qinjun" ;邮件发送人
$s_FromAddress = "username@163.com" ;邮件发送者地址
$s_ToAddress = "55555@163.com" ;收件人地址
$s_Subject = "网关出错了!" ;邮件标题
$as_Body = ""  ;邮件正文
$s_AttachFiles = "" ;附件地址
$s_CcAddress = "" ;抄送地址
$s_BccAddress = "" ;密件抄送地址
$s_Username = "username" ;用户名
$s_Password = "password" ;密码
$IPPort = 25 ;发送端口,Gmail使用的发送端口为465
$ssl = 0
以上的变量定义要放在函数的外面。
发表于 2009-9-6 09:49:34 | 显示全部楼层
不错,这个挺实用!已经测试成功!
发表于 2009-9-6 11:37:24 | 显示全部楼层
这是官网提供的。。
发表于 2009-9-27 15:29:50 | 显示全部楼层
您好,请问发送错误提示中有乱码如何解决?谢谢
发表于 2009-10-14 20:41:00 | 显示全部楼层
这个很不错,谢谢分享
发表于 2009-12-29 15:53:57 | 显示全部楼层
回复 5# ttbb


    乱码是因为MsgBox 没有足够的位置显示那么长的错误日志
发表于 2010-8-27 00:03:57 | 显示全部楼层
多谢!!!
发表于 2010-9-15 17:28:50 | 显示全部楼层
测试有用, 谢谢!
发表于 2010-9-22 09:59:03 | 显示全部楼层
据说smtp发邮件被视为垃圾邮件可能性大,但是http可能就好点。
发表于 2011-4-7 22:30:35 | 显示全部楼层
支持一下...
发表于 2011-4-28 14:18:01 | 显示全部楼层
我的测试没通过啊!
发表于 2011-7-9 22:20:07 | 显示全部楼层
谢了,正需要。下来试试
发表于 2011-7-9 22:46:26 | 显示全部楼层
发送没有失败的提示,但没有收到邮件,不知道是怎么回事
发表于 2011-8-14 08:37:44 | 显示全部楼层
我测试 没通过! 支持一下!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-24 20:49 , Processed in 0.085006 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表