如果SQL查询结果为空,则发送电子邮件

时间:2016-09-14 08:52:14

标签: sql email vbscript

此脚本正确运行以发送电子邮件SQL查询结果,但如果SQL查询结果为空,我需要脚本停止发送电子邮件。

'Declare Constants

Const CDO_SCHEMA = "http://schemas.microsoft.com/cdo/configuration/"
Const CDO_MAIL_HEADER = "urn:schemas:mailheader:"

'Method used to send mail
Const CDO_SEND_USING_REMOTE = 2 'Send using Remote SMTP Server

'Security method used on remote SMTP server
Const CDO_ANONYMOUS = 0 'Use no authentication
Const CDO_BASIC = 1 'Use the basic (clear text) authentication
Const CDO_NTLM = 2 'Use the NTLM authentication

'Delivery Status Notifications
Const cdoDSNDefault = 0 'No DSN commands are issued
Const cdoDSNNever = 1 'No DSN commands are issued
Const cdoDSNFailure = 2 'Return a DSN if delivery fails
Const cdoDSNSuccess = 4 'Return a DSN if delivery succeeds
Const cdoDSNDelay = 8 'Return a DSN if delivery is delayed
Const cdoDSNSuccessFailOrDelay = 14 'Return a DSN if delivery succeeds, fails, or is delayed

'Set method of sending
strSendMethod = CDO_SEND_USING_REMOTE

'Remote SMTP Server Settings
strSmtpServer = "smtp.abc.com" 'Name or IP of SMTP Server
intSmtpPort = 25 'SMTP Server Port; typically 25
intSmtpTimeout = 60 'Number of seconds to try establishing a connection to the SMTP Server
strAuthenticationMethod = CDO_ANONYMOUS

'SMTP Server Authentication - IF BASIC or NTLM; NOT needed for ANONYMOUS
strUserName = ""
strPassword = ""
strUserSSL = False 'True if SMTP Server uses SSL; False if Not

'Message Settings
strTo = "asdf@abc.com"
'Separate multiple addresses with a semi-colon (;)
strCC = ""
strBCC = ""
strFrom = "no-reply-SalesInfo@abc.com"
strSubject = "Pending Sales Order - Perlu di follow up"
strBodyType = "TEXT"
strAttachment = "D:\File.txt" 'Attachment Path i.e. C:\Temp\File.txt
strDSNotification = cdoDSNDefault 'Delivery Status Option Change as needed

'WScript.Echo "Connecting to database..."

'Connect to database & select all from Table
Set objDB = DBConnect()
Set oRS = objDB.Execute("SELECT S_ORDER 'SO#               ',CUSTOMER_NAME'CUSTOMER          ',DATE 'Tanggal           ',USERID 'INTERNAL          ',CALLING 'Approval from     ',LIMIT 'LIMIT             ',TERM 'TERM              ' from abc")

'Dump Records from Table
strOutput = "Please Check This Report :"  & vbCrLf
nRec = 1
Do While Not oRS.EOF
    strOutput = strOutput & "----- " & nRec & " -----" & vbCrLf
    nRec = nRec + 1
    For Each oFld In oRS.Fields
        strOutput = strOutput & oFld.Name & " = " & oFld.Value & vbCrLf
    Next
    oRS.MoveNext
Loop

SendEmail strOutput

'WScript.Echo "Script Finished"

'This function sets up DB Connection using specified DSN
Function DBConnect
    Set objDB = CreateObject("ADODB.Connection")
    objDB.Open "DSN=SQL;uid=sa;pwd=12345"
    'Set Conn = Server.CreateObject("ADODB.Connection")
  'Conn.open "SQL","sa","12345"
  Set DBConnect = objDB
End Function

Sub SendEmail(strBody)
    'Create Objects
    Set objConfig = CreateObject("CDO.Configuration")
    Set objEmail = CreateObject("CDO.Message")

    'Prepare email configuration
    With objConfig.Fields
        .Item(CDO_SCHEMA & "sendusing") = strSendMethod
        .Item(CDO_SCHEMA & "smtpserver") = strSmtpServer
        .Item(CDO_SCHEMA & "smtpserverport") = intSmtpPort
        .Item(CDO_SCHEMA & "smtpconnectiontimeout") = intSmtpTimeout
        .Item(CDO_SCHEMA & "smtpauthenticate") = strAuthenticationMethod

        If.Item(CDO_SCHEMA & "smtpauthenticate") <> 0 Then
            .Item(CDO_SCHEMA & "sendusername") = strUsername
            .Item(CDO_SCHEMA & "sendpassword") = strPassword
            .Item(CDO_SCHEMA & "smtpusessl") = strUserSSL
        End If
        .Update
    End With

    'Create email and send
    With objEmail
        Set.Configuration = objConfig

        .To = strTo

        If strCC <> "" Then
            .CC = strCC
        End If

        If strBCC <> "" Then
            .BCC = strBCC
        End If

        .From = strFrom

        .Subject = strSubject

        If strBodyType = "HTML" Then
            .HTMLBody = strBody
        ElseIf strBodyType = "TEXT" Then
            .TextBody = strBody
        End If

        If strAttachment <> "" Then
            .AddAttachment strAttachment
        End If

        If strDSNotification <> 0 And strDSNotification <> 1 Then
            .Fields(CDO_MAIL_HEADER & "disposition-notification-to") = strFrom
            .Fields(CDO_MAIL_HEADER & "return-receipt-to") = strFrom
            .DSNOptions = strDSNotification
            .Fields.update
        End If

        .Send
    End With
End Sub

2 个答案:

答案 0 :(得分:1)

根据您的查询是否返回记录,只需发送电子邮件。

更改此行:

SendEmail strOutput

进入这个:

If nRec > 1 Then SendEmail strOutput

答案 1 :(得分:0)

通过以下条件 如果oRS.RecordCount> 0或oRS则不是Nothing 您将能够控制发送的电子邮件。

尝试以下方法:

Const CDO_SCHEMA = "http://schemas.microsoft.com/cdo/configuration/"
Const CDO_MAIL_HEADER = "urn:schemas:mailheader:"

'Method used to send mail
Const CDO_SEND_USING_REMOTE = 2 'Send using Remote SMTP Server

'Security method used on remote SMTP server
Const CDO_ANONYMOUS = 0 'Use no authentication
Const CDO_BASIC = 1 'Use the basic (clear text) authentication
Const CDO_NTLM = 2 'Use the NTLM authentication

'Delivery Status Notifications
Const cdoDSNDefault = 0 'No DSN commands are issued
Const cdoDSNNever = 1 'No DSN commands are issued
Const cdoDSNFailure = 2 'Return a DSN if delivery fails
Const cdoDSNSuccess = 4 'Return a DSN if delivery succeeds
Const cdoDSNDelay = 8 'Return a DSN if delivery is delayed
Const cdoDSNSuccessFailOrDelay = 14 'Return a DSN if delivery succeeds, fails, or is delayed

'Set method of sending
strSendMethod = CDO_SEND_USING_REMOTE

'Remote SMTP Server Settings
strSmtpServer = "smtp.abc.com" 'Name or IP of SMTP Server
intSmtpPort = 25 'SMTP Server Port; typically 25
intSmtpTimeout = 60 'Number of seconds to try establishing a connection to the SMTP Server
strAuthenticationMethod = CDO_ANONYMOUS

'SMTP Server Authentication - IF BASIC or NTLM; NOT needed for ANONYMOUS
strUserName = ""
strPassword = ""
strUserSSL = False 'True if SMTP Server uses SSL; False if Not

'Message Settings
strTo = "asdf@abc.com" 
'Separate multiple addresses with a semi-colon (;)
strCC = ""
strBCC = ""
strFrom = "no-reply-SalesInfo@abc.com"
strSubject = "Pending Sales Order - Perlu di follow up"
strBodyType = "TEXT"
strAttachment = "D:\File.txt" 'Attachment Path i.e. C:\Temp\File.txt
strDSNotification = cdoDSNDefault 'Delivery Status Option Change as needed

'WScript.Echo "Connecting to database..."

'Connect to database & select all from Table
Set objDB = DBConnect()
Set oRS = objDB.Execute("SELECT S_ORDER 'SO#               ',CUSTOMER_NAME'CUSTOMER          ',DATE 'Tanggal           ',USERID 'INTERNAL          ',CALLING 'Approval from     ',LIMIT 'LIMIT             ',TERM 'TERM              ' from abc")
if oRS.RecordCount>0 or oRS is Not Nothing then
'Dump Records from Table
strOutput = "Please Check This Report :"  & vbCrLf
nRec = 1
Do While Not oRS.EOF
    strOutput = strOutput & "----- " & nRec & " -----" & vbCrLf 
    nRec = nRec + 1
    For Each oFld In oRS.Fields
        strOutput = strOutput & oFld.Name & " = " & oFld.Value & vbCrLf
    Next
    oRS.MoveNext
Loop

SendEmail strOutput
end if

'WScript.Echo "Script Finished"

'This function sets up DB Connection using specified DSN
Function DBConnect
    Set objDB = CreateObject("ADODB.Connection")
    objDB.Open "DSN=SQL;uid=sa;pwd=12345"
    'Set Conn = Server.CreateObject("ADODB.Connection")
    'Conn.open "SQL","sa","12345"
    Set DBConnect = objDB
End Function

Sub SendEmail(strBody)
    'Create Objects
    Set objConfig = CreateObject("CDO.Configuration")
    Set objEmail = CreateObject("CDO.Message")

    'Prepare email configuration
    With objConfig.Fields
        .Item(CDO_SCHEMA & "sendusing") = strSendMethod
        .Item(CDO_SCHEMA & "smtpserver") = strSmtpServer
        .Item(CDO_SCHEMA & "smtpserverport") = intSmtpPort
        .Item(CDO_SCHEMA & "smtpconnectiontimeout") = intSmtpTimeout
        .Item(CDO_SCHEMA & "smtpauthenticate") = strAuthenticationMethod

        If.Item(CDO_SCHEMA & "smtpauthenticate") <> 0 Then
            .Item(CDO_SCHEMA & "sendusername") = strUsername
            .Item(CDO_SCHEMA & "sendpassword") = strPassword
            .Item(CDO_SCHEMA & "smtpusessl") = strUserSSL
        End If
        .Update
    End With

    'Create email and send
    With objEmail
        Set.Configuration = objConfig

        .To = strTo

        If strCC <> "" Then
            .CC = strCC
        End If

        If strBCC <> "" Then
            .BCC = strBCC
        End If

        .From = strFrom

        .Subject = strSubject

        If strBodyType = "HTML" Then
            .HTMLBody = strBody
        ElseIf strBodyType = "TEXT" Then
            .TextBody = strBody
        End If

        If strAttachment <> "" Then
            .AddAttachment strAttachment
        End If

        If strDSNotification <> 0 And strDSNotification <> 1 Then
            .Fields(CDO_MAIL_HEADER & "disposition-notification-to") = strFrom
            .Fields(CDO_MAIL_HEADER & "return-receipt-to") = strFrom
            .DSNOptions = strDSNotification
            .Fields.update
        End If

        .Send
    End With
End Sub