Foxtable(狐表)用户栏目专家坐堂 → MailMessage方式异步发送邮件失败,求解!


  共有2300人关注过本帖树形打印复制链接

主题:MailMessage方式异步发送邮件失败,求解!

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
MailMessage方式异步发送邮件失败,求解!  发帖心情 Post By:2021/5/6 17:24:00 [只看该作者]

 MailMessage方式异步发送邮件失败,求解!
在本地电脑上运行发送邮件是可以正常的,放在阿里云远端服务器上就提示错误如下:

错误日志如下:
2021-05-06 17:17:52.9365
事件/函数: [{test message1}] {System.Net.Mail.SmtpException: 发送邮件失败。 ---> System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets.SocketException: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 183.3.225.42:25
   在 System.Net.Sockets.Socket.InternalEndConnect(IAsyncResult asyncResult)
   在 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
   在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult result)
   在 System.Net.Mail.SmtpTransport.EndGetConnection(IAsyncResult result)
   在 System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult result)
   --- 内部异常堆栈跟踪的结尾 ---}


异步发送邮件代码:
If FileSys.GetFiles(ProjectPath & "Attachments\附件地址").count> 0 Then
    output.Show("即将推送邮件")
    Dim client As New System.Net.Mail.SmtpClient()
    client.Host = "smtp.163.com"  '//smtp服务器地址
    client.Credentials = New System.Net.NetworkCredential("cn", "EV")    '//发件人邮箱的用户和密码(授权码,并不是发件邮箱的密码)
    client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network  '//将smtp的出站方式设为 Network
    Dim message As New System.Net.Mail.MailMessage
    message.From = new System.Net.Mail.MailAddress("cn@163.com")
    message.To.Add("15@qq.com")'主送,多个邮件地址之间用半角逗号分开
    message.Subject = "这是个测试邮件!"   '//邮件标题
    message.IsBodyHtml = True  '; //邮件正文是否是HTML格式
    Dim attach1 As new System.Net.Mail.Attachment( ProjectPath & "images\saoyisao.png", System.Net.Mime.MediaTypeNames.Image.Jpeg)  '这里设置将图片显示在邮件中
    message.Attachments.Add(attach1)
    Dim pic1 As String = attach1.ContentId '设置ContentId
    ''对于html邮件,可以在正常邮件中写好内容,在查看html代码,复制到这里
    Dim sb As New StringBuilder
    sb.Append("Hello World<br>")
    sb.Append("<img src=""cid:"& pic1 &"""/><br>")  '将前面增加图片附件放入到邮件中直接显示,注意如果html代码中存在 " 请改成 ""
    sb.Append("Hello China")
    Dim content As String = sb.ToString '设置正文内容'
    message.Body = content   '//邮件正文
    For Each File As String In FileSys.GetFiles(ProjectPath & "\Attachments\附件地址\")
        Output.Show(File)
        'For q As Integer = 0 To 1   '多个附件添加
        Dim attachment As new  System.Net.Mail.Attachment(File,System.Net.Mime.MediaTypeNames.Application.Octet)  '//单个添加附件,第二个参数表示附件的文件类型,可以不用指定
        attachment.name = FileSys.GetName(File)
        attachment.nameEncoding =  System.Text.Encoding.UTF8  '//设置附件显示名称的编码
        message.Attachments.Add(attachment)
        'Next
    Next
AddHandler client.SendCompleted, AddressOf SendCompletedCallback   '增加在发送电子邮件或取消操作后收到通知
Dim userState As String = "test message1"
client.SendAsync(message, userState)   '不需要try判断,userState值将在全局代码中返回在e.UserState中
Else
    output.Show("暂无附件可推送")
End If

全局代码如下:
Public Sub SendCompletedCallback(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
' Get the unique identifier for this asynchronous operation.
Dim token As String = CStr(e.UserState)   '等于client.SendAsync(message, userState) 中userState的值

If e.Cancelled Then  '邮件发送取消反馈内容
    StatusBar.Message1= ("[" & token & "] Send canceled.")
End If
If e.Error IsNot Nothing Then  '邮件发送失败反馈内容
    StatusBar.Message1= ("[{" & token & "}] {" & e.Error.ToString() & "}" )  '当前用的output.show,可以根据实际情况使用显示方式.
    
    
    Dim bu As new StringBuilder
    bu.AppendLine(Format( Date.Now,"yyyy-MM-dd HH:mm:ss.ffff")) '记录出错时间
    bu.AppendLine("事件/函数: " & "[{" & token & "}] {" & e.Error.ToString() & "}"  ) '记录出错的事件或者函数
    Output.Logs("AppLogging").Add(bu.ToString)
    Output.Logs("AppLogging").Save(ProjectPath & "Mmsglog1.txt",True) '日志位于当前项目目录里
    Output.Logs("AppLogging").Clear
    
    
Else   '发送成功后反馈内容
    StatusBar.Message1= ("邮件发送成功")
    
End If

End Sub

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106648 积分:542423 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/6 17:30:00 [只看该作者]

阿里云安全组里,邮件发送使用的端口开了吗?防火墙对应的端口开了吗?

另外可以看看:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=146684&replyID=57021&skin=1

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)阿里云安全组里,邮件发送使用的端口...  发帖心情 Post By:2021/5/7 15:54:00 [只看该作者]

老师  谢谢 经过你的提示与测试与阿里云工程协助    
QQ邮件:
client.EnableSsl = false
client.Port = 587
在阿里云服务器上可以正常发送邮件了



但是163邮件:
client.EnableSsl = false
client.Port = 994
client.EnableSsl = false 
client.Port = 465
在阿里云服务器上均不能成功发送邮件,但是在本地又可以推送邮件,麻烦老师继续帮忙看看?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106648 积分:542423 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 16:00:00 [只看该作者]

这种还是继续寻求163或者阿里云的支持吧。

 回到顶部