× Share your code snippets, screen shots etc. here

How to enhance your VO application with X# - the SendMail DLL

  • Wolfgang Riedmann
  • Wolfgang Riedmann's Avatar Topic Author
  • Offline
1 year 5 months ago - 1 year 5 months ago #1 by Wolfgang Riedmann
Often some things are hard or impossible to accomplish in VO applications, but easy in X# applications because the .NET framework has the required functionalities.

One of the VO shortcomings is the possibility to send mail through GMail: SSL is required and the VO cSMTP classes cannot use SSL because the Windows API seems to not have the needed functionality.

Therefore I created a simple X# DLL, named SendMail.DLL that exposes a class interface ISmtpSender through COM and use this DLL in my VO applications.

You can find this DLL together with a VO sample application and the relative source code in XIDE export format attached to this message.

Of course you can enhance this DLL as needed, but please generate a new SNK file and new GUIDs for your own version. I'm using exactly this DLL in several of my applications.

The DLL must be located in the directory of the executable, otherwise SideBySide will not work.

The entire mechanism is a bit unstable until you understand how this works: it is a game between the COM interface of the DLL, the DLL manifest (generated by mt.exe) and the manifest of the executable. And please pay particular attention to the version info: they must match!

This is the content of the readme in the DLL source code:
1) create key file with 
sn - k sendmail.snk
2) after building and signing the DLL, read the public key with
sn -T sendmail.dll
(upper case T)
3) create the TLB with elevated rights
regasm sendmail.dll /tlb
4) remove the registration
regasm sendmail.dll /unregister                                                  
5) create the automation server in VO
6) add cClsID and cProdId in the Init method
7) create the manifest for the DLL
mt.exe -managedassemblyname:sendmail.dll -nodependency -out:sendmail.dll.manifest  
8) adjust the manifest (remove "msil" and add "win32")

- the namespace should be set also in the DLL properties, can be identical to the DLL file name
- the class CANNOT have the same name as the DLL 

Debugging (if the VO application does not starts):
sxstrace Trace -logfile:systrace.out
sxstrace Parse -logfile:systrace.out -outfile:sxstrace.txt
notepad sxstrace.txt

Happy mailing!

Last edit: 1 year 5 months ago by Wolfgang Riedmann.

Please Log in or Create an account to join the conversation.

  • Wolfgang Riedmann
  • Wolfgang Riedmann's Avatar Topic Author
  • Offline
1 year 5 months ago #2 by Wolfgang Riedmann
A few days after posting this sample, I have received a email with the following text (quoting only the important part):

I started the tests and achieved the following results.

For mailserver without SSL, the email is sent without any problem.

For SSL mailserver:
Port: 587
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.
Note: Login and Password are entered correctly.
Port: 465
Failure sending mail.

Failure sending mail.

The e-mail is sent without any problem.

I want to ask if the problem is in the servers or I have not done the right thing.

I have answered as follows:

with gmail my sample works, I have tested it. But to have SMTP working with GMail, you have to enable „less secure applications“ in the web interface. Otherwise Google requires an authentication type that is nearly impossible to implement.

For the other SMTP servers I cannot say anything as I don’t know the specifics.
Unfortunately there are two possible SMTP SSL types: TLS and SMTPS (mostly over port 465).

The .NET classes unfortunately support only TLS. Please see here for more informations:


So because of this my sample cannot support SMTPS like no other software based on the .NET Framework classes can do this.

Maybe Microsoft later decides to support it, or maybe someone releases a free implementation (but I have my doubts).


Please Log in or Create an account to join the conversation.