sending gmail with IGOR

From experimenting with the XOP's SOCKIT and base64 (available on IGORexchange), I've found how to send email from IGOR, using the SMTP protocol. It works quite well, although there is one catch. You have to install a program called Stunnel (http://www.stunnel.org/). They have windows binaries available there, and it's easy to install the mac version (./configure, make, sudo make install). There is a config file which one has to get the hang of, but it's not that difficult.

The snippet works by connecting to port 5000 on localhost, which Stunnel forwards (with SSL) to port 465 on the gmail smtp server. Things then proceed as normal with the run of the mill SMTP commands.

The main use of this would be e.g. Acquisition computers were the computer could send you an email to reassure you that things were ok/gone wrong.


#pragma rtGlobals=1		// Use modern global access method.
Function gmailMessage(username, password, recipients, subject, message)
string username, password, recipients, subject, message

variable sockID,ii
make/t/o buf
Wave/t buf
try
	sockitopenconnection/q sockID, "localhost",5000,buf
	if(sockID<1)
		abort
	endif
	sockitsendnrecv/SMAL/TIME=2 sockID, "EHLO gmail.com\n"
	if(V_Flag || !stringmatch(S_tcp[0,2],"220"))
		abort
	endif
	sockitsendnrecv/SMAL/TIME=2 sockID, "AUTH LOGIN\n"
	if(V_Flag  || !stringmatch(S_tcp[0,2],"334"))
		abort
	endif
	sockitsendnrecv/SMAL/TIME=2 sockid, base64encode(username)+"\n"
	if(V_Flag  || !stringmatch(S_tcp[0,2],"334"))
		abort
	endif
	sockitsendnrecv/SMAL/TIME=2 sockid, base64encode(password)+"\n"
	if(V_Flag  || !stringmatch(S_tcp[0,2],"235"))
		abort
	endif
	sockitsendnrecv/SMAL/TIME=2 sockID, "MAIL FROM:<"+username+"@gmail.com>\n"
	if(V_Flag  || !stringmatch(S_tcp[0,2],"250"))
		abort
	endif
	for(ii=0 ; ii<itemsinlist(recipients) ; ii+=1)
		sockitsendnrecv/SMAL/TIME=2 sockID, "RCPT TO:<"+stringfromlist(ii, recipients)+">\n"
	endfor
	sockitsendnrecv/SMAL/TIME=2 sockID, "DATA\n"
	if(V_Flag  || !stringmatch(S_tcp[0,2],"354"))
		abort
	endif
	sockitsendnrecv sockID, "From:"+username+"\n"
	for(ii=0; ii<itemsinlist(recipients) ; ii+=1)
		sockitsendnrecv sockID, "To:"+stringfromlist(ii, recipients)+"\n"
	endfor
	sockitsendnrecv sockID, "Subject:"+subject+"\n\n"
	sockitsendnrecv sockID, message+"\r\n"
	sockitsendnrecv sockID, "."+"\r\n"
	if(V_Flag  || !stringmatch(S_tcp[0,2],"250"))
		abort
	endif
catch
	print "Failed to send email"
endtry
sockitsendnrecv sockID, "QUIT\n"

sockitcloseconnection(sockID)
killwaves/z buf
End

Forum

Support

Gallery

Igor Pro 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More