以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助:提示发送邮件失败 无法从传输连接中读取数据: net_io_connectionclosed。如何解决呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=131450)

--  作者:李孝春
--  发布时间:2019/2/26 16:16:00
--  求助:提示发送邮件失败 无法从传输连接中读取数据: net_io_connectionclosed。如何解决呢?
.NET Framework 版本:2.0.50727.8784
Foxtable 版本:2018.10.9.1
错误所在事件:自定义函数SendEmail
详细错误信息:
调用的目标发生了异常。
发送邮件失败。
无法从传输连接中读取数据: net_io_connectionclosed。


自定义函数代码如下:
Dim ab As Row = Args(0)
Dim rw As Row = Args(1)
Dim dr As DataRow = Args(2)

Dim client As New System.Net.Mail.SmtpClient(ab("单位QQ邮件网关"), ab("单位QQ邮件端口")) \'或者465
\'MessageBox.Show(ab("单位QQ邮件网关"))
client.EnableSsl = True \'SSL
client.Credentials=New System.Net.NetworkCredential(ab("单位QQ邮件"), ab("单位QQ邮件发送授权码"))
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
Dim message As New System.Net.Mail.MailMessage()
message.From=new System.Net.Mail.MailAddress(ab("单位QQ邮件"), ab("单位QQ邮件别名"))
message.To.Add(new System.Net.Mail.MailAddress(rw("电子邮件"), rw("姓名")))
message.To.Add(rw("电子邮件"))
\'MessageBox.Show(rw("电子邮件"))
message.Subject = "瓮安检察" & dr("流程名称") & "通知"
message.BodyEncoding = System.Text.Encoding.UTF8
Dim content As String
content &= "【"& rw("姓名") & "】" & "您好!" & vbcrlf
content &=  vbcrlf
content &= dr("嫌疑人姓名") & "涉嫌" & dr("涉嫌案由") & "一案,经我院" & dr("流程时间") & "审查,现在已经进入【" & dr("流程名称") & "】" & vbcrlf
content &=  vbcrlf
content &= dr("注意事项")
\'MessageBox.Show(dr("注意事项"))
content &=  vbcrlf
content &= "参考法律法规" & dr("法律法规")
message.Body = content
client.Send(message)

发送邮件代码
If rw("电子邮件") <> Nothing Then
                    Dim ab As Row = Tables("系统信息").Current
                    Dim drs = DataTables("告知内容").Select("姓名 = \'" & rw("姓名") & "\'And 是否告知 = \'是\' " )
                    For Each dr As DataRow In drs
                        Functions.AsyncExecute("SendEmail",ab,rw,dr)
                        \' dr("是否告知")="是"
                    Next
                End If
[此贴子已经被作者于2019/2/26 16:18:06编辑过]

--  作者:有点甜
--  发布时间:2019/2/26 16:59:00
--  

代码不能这样写,你应该被整一段代码写成函数,然后异步执行这个函数。

 

也就是:发送邮件代码,写成异步函数;调用发送邮件那里,不能用异步。

 

If rw("电子邮件") <> Nothing Then
    Dim ab As Row = Tables("系统信息").Current
    Dim drs = DataTables("告知内容").Select("姓名 = \'" & rw("姓名") & "\'And 是否告知 = \'是\' " )
    For Each dr As DataRow In drs
        Functions.Execute("SendEmail",ab,rw,dr)
        \' dr("是否告知")="是"
    Next
End If


--  作者:李孝春
--  发布时间:2019/2/26 17:10:00
--  回复:(有点甜)代码不能这样写,你应该被整一段代码...
有点甜老师 更正之后  错误还是一楼图示的错误一样!
--  作者:有点甜
--  发布时间:2019/2/26 17:30:00
--  
以下是引用李孝春在2019/2/26 17:10:00的发言:
有点甜老师 更正之后  错误还是一楼图示的错误一样!

 

更换你的邮箱的账号密码等信息后测试。

 

尝试先发一条信息

 

    For Each dr As DataRow In drs
        Functions.Execute("SendEmail",ab,rw,dr)

        exit for
    Next


--  作者:李孝春
--  发布时间:2019/2/26 17:49:00
--  回复:(有点甜)代码不能这样写,你应该被整一段代码...
经测试可以发的
系统也是时好时坏


而且这个问题有点怪  估计是QQ邮件的限制,有没有办法直接取消错误弹出提示,变更为自定义的错误  比如:温馨提示,根据QQ邮件规则,当前已达上限,请稍后再操作邮件!


--  作者:有点甜
--  发布时间:2019/2/26 17:55:00
--  

加上 try catch 即可

 

http://www.foxtable.com/webhelp/scr/2070.htm

 

或者看看

 

http://www.foxtable.com/webhelp/scr/2655.htm

 


--  作者:李孝春
--  发布时间:2019/2/26 18:01:00
--  回复:(有点甜)加上 try catch 即可?http:...
Dim client As New System.Net.Mail.SmtpClient(ab("单位QQ邮件网关"), ab("单位QQ邮件端口")) \'或者465
\'MessageBox.Show(ab("单位QQ邮件网关"))
client.EnableSsl = True \'SSL
client.Credentials=New System.Net.NetworkCredential(ab("单位QQ邮件"), ab("单位QQ邮件发送授权码"))
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
Dim message As New System.Net.Mail.MailMessage()
message.From=new System.Net.Mail.MailAddress(ab("单位QQ邮件"), ab("单位QQ邮件别名"))
message.To.Add(new System.Net.Mail.MailAddress(rw("电子邮件"), rw("姓名")))
message.To.Add(rw("电子邮件"))
\'MessageBox.Show(rw("电子邮件"))
message.Subject = "瓮安检察" & dr("流程名称") & "通知"
message.BodyEncoding = System.Text.Encoding.UTF8
Dim content As String
content &= "【"& rw("姓名") & "】" & "您好!" & vbcrlf
content &=  vbcrlf
content &= dr("嫌疑人姓名") & "涉嫌" & dr("涉嫌案由") & "一案,经我院" & dr("流程时间") & "审查,现在已经进入【" & dr("流程名称") & "】" & vbcrlf
content &=  vbcrlf
content &= dr("注意事项")
\'MessageBox.Show(dr("注意事项"))
content &=  vbcrlf
content &= "参考法律法规" & dr("法律法规")
message.Body = content
Try
   client.Send(message)
Catch ex As Exception
   
MessageBox.Show(“邮件超限”
End Try

这样么?确实弹出了邮件超限,但是有没有办法只让它出现一次  不根据当前数据行次数来多次提醒呢?

[此贴子已经被作者于2019/2/26 18:04:08编辑过]

--  作者:有点甜
--  发布时间:2019/2/26 18:11:00
--  
Try
   client.Send(message)
      return "正常"
Catch ex As Exception
   
MessageBox.Show(“邮件超限”
     return "出错"
End Try
 

调用的时候,获取信息

 

    For Each dr As DataRow In drs
        Dim jg = Functions.Execute("SendEmail",ab,rw,dr)

        If jg = "出错" Then

            exit for

        End If
    Next


--  作者:李孝春
--  发布时间:2019/2/26 18:25:00
--  回复:(有点甜)Try   client.Send(messag...
OK  谢谢有点甜老师  我稍后试一试看看是否可以操作成功  在禁止发送时间过了之后再试
--  作者:李孝春
--  发布时间:2019/2/27 16:45:00
--  回复:(有点甜)Try   client.Send(messag...
有点甜老师 怎么判断邮件发送失败呢?
当发送成功时,写入邮件告知等于是  反之就为否
当前不知道怎么判断邮件是发送成功还是失败!