Forum Discussion

dsirrine_23403's avatar
Icon for Nimbostratus rankNimbostratus
Feb 24, 2011

Custom Monitor EAV with Send/Expect script

I am having an issue with my custom monitor where I am attempting to send an e-mail via telnet on port 25 using the send/expect scripted monitor. What I have so far is the following:



send telnet =IP= 25\r\n


expect 220


send HELO =IP=\r\n


expect 250


send MAIL FROM: =email=\r\n


expect 250


send RCPT TO: =email=\r\n


expect 250


send DATA\r\n


expect 354


send SUBJECT:This is a test\r\n


send \r\n


send Test\r\n


send .\r\n


expect 250


send quit\r\n



When it sends the telnet *ip* 25, it recieves the 220 ok, however, it then doesn't ignore the rest of the header lines. Is there a method to use regex or a pause statement that I can use to solve this issue in this expect script? Thank you in advance.


4 Replies

  • I'm not sure whether you can just expect for 250.



    SMTP uses dash (-) to seperate the status code from the response text while there are more lines remaining, eg. response from SMTP:



    root@server telnet smtpserver 25


    220 Ok


    ehlo there


    250-Line 1


    250-Line 2


    250-Line 3


    250 This is the end of SMTP response



    You might need to modify the expect string to retrieve the last line.



    I'm not good with Expect, but if you need help, I can give you a sample using Perl's Net::SMTP



  • George_Watkins_'s avatar
    Historic F5 Account
    Hi dsirrine,



    It might be easier to do this as a bash script and run it as an EAV. I wrote an article on EAVs last year and it might help if you are writing any external monitors:



  • I got it to work. I didn't need the initial "send telnet" as the scripted monitor does that to begin with. Unfortunately, I can't use pop/imap/etc as this is to test an exim gateway and can't necessarily "retrieve" the e-mail from the impacted system. doing an "ehlo" on localhost rounds it out nicely. Here's what I ended with:

    expect 220 
    send "HELO localhost\r\n" 
    expect "250" 
    send "MAIL FROM: address@localhost\r\n" expect "250" 
    send "RCPT TO: address@localhost\r\n" 
    expect "250" 
    send "DATA\r\n" 
    expect "354" 
    send "SUBJECT:F5 LTM SMTP Health Check\r\n" 
    send "\r\n" 
    send "This e-mail is generated by the SMTP health check by the F5 LTM.\r\n" 
    send ".\r\n" 
    expect "250" send "quit\r\n" 
    expect "221"

    = a local account that the mailbox has been redirected to /dev/null. If /var is full, I get an error of not being able to write to spooler, otherwise, I get a 250 OK.
  • Hi dsirrine,



    Thanks a lot for replying with your solution. I added it to the Codeshare here: