This was an odd one that came up during a recent project. My colleague Kevin had activated our standard Keystone workflow email notifications and configured the SMTP settings for the Sitecore application.
A short workflow test later and not only were emails not going out but an error was occurring with the message: “The device is not ready”. What is going on? Why is an IO error being thrown?
Upon investigation, I found some .NET SMTP settings had been added to the Sitecore Web.config. Specifically, a specifiedPickupDirectory setting.
<configuration> <system.net> <mailSettings> <smtp deliveryMethod="specifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="c:\maildrop" /> </smtp> </mailSettings> </system.net> </configuration>
In all my years I had never seen anybody configure SMTP to drop messages to the file system for processing. I didn’t even know the SMTP client could be configured this way!
The error occurs if the value specified for the pickupDirectoryLocation property cannot be accessed. In our scenario, it was referencing a drive which did not exist on the system, hence the error.
The fix is pretty easy…
- Send SMTP directly, not using this setting, OR
- Make sure the setting is a valid path