Take My SQLMail, Please!

By Bill Wunder


Who would disagree that the ability to send email is essential to SQL Server. The need to know when a critical failure has occurred or to deliver a result set in a timely manner is endlessly valuable. On the other hand, the health and availability of the database undeniably outweighs the need for notification. No need to know that the water is boiling if the kitchen is on fire.


SQLMail is the out of the box answer to notification and Outlook 2000 is the vendors recommended mail client for SQL 2000 (For example see Q281293). SQLMail has burned me so many times I don’t think I will stick my hand back in those flames. If you're not having any failures that you can directly attribute to SQLMail or errors and not experiencing failures that seem to be manifestations of memory leaks and you're not running a standby server that requires a rename in the event of a failover you may not need to consider anything other than SQLMail. If, however, you are experiencing such behavior as the server just stops responding – perhaps the mouse won’t even move - and has to be restarted or you have to use the -g switch for reasons such as linked server queries fail with an "out of memory message" after the server has been continuously up for several days or your jobs with notification enabled hang in a “Pending Completion Operation” state you may want to consider chucking SQLMail and Outlook out the Windows.


Undoubtedly Microsoft will eventually solve what ever the issue de jour is with SQLMail, but I’m thinking as long as the strongly coupled connection between SQL Server and a desktop application with a divergent product lifecycle like the Outlook mail client remains, there will be a compounded stream of new issues, either with the interface or the mail client that will put the stability of the SQL Server at risk. I find it curious that Microsoft has wedding the enterprise database to a desktop application and continues to let the two products go down separate evolutionary paths. It’s like putting the Taj Mahal on stilts. I notice they had to come up with Notification Services to fill the needs at msn.com. Notification Services is built to work with an Simple Mail Transport Protocol (SMTP) mail relay. It doesn't read, it only sends mail. It is equally interesting that they have documented the use of Collaboration Data Objects (CDO) as a way to send email without using SQLMail in the Microsoft KnowledgeBase document Q312839. Sure does give me the feeling they know there is a problem, yet the replacement they recommend involves enabling the IIS on the SQL Server machine and using the sp_OAs to dispatch the emails. Seems like a move from a Mail API (MAPI) client application to an SMTP bloat-ware solution that will add memory contention to the SQL Server with it’s own set of know memory leaks to me (see my previous article “Automation and T-SQL” for my opinions concerning server stability and the sp_OAs in a high availability setting).


Even before Q312839 in our shop we began developing the concept of eliminating SQLMail dependencies from our SQL Servers. Over time we’ve seen an increased stability of our SQL Servers and we’ve also seen a few tools emerge that ease the transition away from the MAPI dependencies. Early on, the transition was made easier for us because we have an in house custom notification system - that can go head to head with Microsoft’s Notification Services add-in in terms of published scalability. The problems we experienced in using our notification system were it’s limitations in delivering a result set and the risk of a development miss-queue having a negative impact on the production environment. Our notification system is built with a relatively small email body limit so the only real option was to send all query results as attachments. We really wanted to be able to put the data in the body in most cases because there is a tendency to not look at an attachment in the middle of a busy workday. Too, we actually experienced a case where a developer sent about 60,000 emails in a T-SQL while loop during the busiest time of the production day only to discover that this will cause unacceptable queuing at the production SMTP server. We decided to look around for other ways to solve our SQLMail needs and leave the production application to do what it does so admirably: serve our customers. 


Looking around the Internet one can come up with a few solutions aimed at helping you and I move our SQL Server notifications toward an SMTP mail server other than the all Microsoft alternative offered in Q312839. A Google search for “SQL SERVER SMTP” came up with hundreds of hits. Rather than try to present an exposé of the available SQLMail alternatives, in the next couple of articles I’m going to describe a solution for you that does not depend on MAPI or SQLMail or even on one particular alternative. A solution that includes a replacement for the T-SQL xp_sendmail and the SQLMail features in the SQLAgent.  


We’ll take a look at a solution that is asynchronous, keeps a history of sent messages, maintains the kept history, uses a  standard user interface that mimics xp_sendmail, enhances the messages sent by the SQL Agent by including actual error messages rather than the generic failure message that SQL Agent notification sends, provides full support for SQL Agent Alerts and is adaptable to any SQLMail alternative technology you might decide to use. As you will see, our solution makes it very easy to use any underlying technology and even to change the underlying technology quite easily by centralizing the interface in a single stored procedure. In our shop we chosen the xp_smtp_sendmail extended stored procedure that is a no cost download from www.sqldev.net as the underlying SMTP relay agent to replace SQLMail. We've been pretty happy with the features of this .dll but have had a few problems getting it to work correctly with Microsoft's IIS SNMP service so we use a LINUX SMTP server. That might not be the best alternative for everyone. In our case we have a line of these servers and the ability to support them in house. I’ll leave it to you to select the best technology for your shop. After all, you’re the DBA.