Chilkat HOME Android™ ASP Visual Basic VB.NET C# iOS (IPhone) Objective-C C++ C Unicode C++ Unicode C MFC Delphi DLL Delphi ActiveX FoxPro Java Perl PHP Extension PHP ActiveX Python PowerShell Ruby SQL Server VBScript
Send Email without Mail ServerHow to send an email without a mail server (so-to-speak). Downloads: MS Windows Visual C/C++ Libraries Linux/CentOS C/C++ Libraries MAC OS X C/C++ Libraries Solaris C/C++ Libraries C++ Builder Libraries FreeBSD C++ Libraries HP-UX C++ Libraries BlackBerry QNX C++ Libraries #include <CkMailMan.h> #include <CkString.h> #include <CkEmail.h> void ChilkatSample(void) { // Is it really possible to send email without connecting to // a mail server? Not really. // When people ask 'Do you support sending email without // a mail server'? what they're really asking is: 'I don't // have an SMTP server, and I want to send email. I see // other components available where it's not necessary // to specify an SMTP server. Does your component have that // ability?' In short, the answer is Yes. But you need // to understand some things before you jump in... // Here's what happens inside those other components // that claim to not need a mail server: The component does // a DNS MX lookup using the intended recipient's email address // to find the mail server (i.e. SMTP server) for that // domain. It then connects to that server and delivers the // email. You're still connecting to an SMTP server -- just // not YOUR server. // Chilkat provides an MxLookup method where you can lookup // the SMTP hostname that services any given email address. // You would then assign the SmtpHost property to this value. // Chilkat can then connect directly to the recipient's mail // server and deliver the email. // There are a few gotcha's though... // First, if you're writing an application that is widely // distributed, your app might be running within a network // that blocks outgoing connections to the SMTP port. // Earthlink, for example, is one major ISP that does this. // When you are connected to the Internet via Earthlink, // your apps can *only* connect to Earthlink's SMTP server // and will not be able to reach any remote servers. To send // email, you must use Earthlink's SMTP as a relay. This is // common with ISPs. So... if your application is coded // as in this example, it will not work within those networks. // // Second, some SMTP servers will reject unauthenticated // sessions attempting to send email from dynamic IP addresses. // You may see this error in your LastErrorText: // 553-Your attempt to send email to us has been blocked // 553-because your email server is not currently on that domain's Accepted // 553-Senders list. To request addition to their Accepted Senders list, // 553-please navigate with a Web browser to the following URL: // 553-http://reportrbl.gate2service.com/Whitelist/?IPAddress=67.173.123.150 // 553 See http://www.dnsbl.us.sorbs.net/ (dul) // In a nutshell, just because you were able to do the MxLookup // and connect to the recipient's mail server, doesn't mean // you'll be able to send email -- it depends on the IP address // from which you're connecting. // Finally, the DNS lookup is potentially time consuming. // In addition, you cannot use somebody else's email server // as a relay, so if you're connecting to smtp.xyz.com, you // can only send email to email addresses at xyz.com. // To send email to 3 recipients at different domains means // making 3 separate connections to 3 separate SMTP servers // to send the email one at a time. // The mailman object is used for sending and receiving email. CkMailMan mailman; // Any string argument automatically begins the 30-day trial. bool success; success = mailman.UnlockComponent("30-day trial"); if (success != true) { printf("Component unlock failed\n"); return; } CkString recipient; recipient = "admin@chilkatsoft.com"; // Do a DNS MX lookup for the recipient's mail server. CkString smtpHostname; smtpHostname = mailman.mxLookup(recipient); if (smtpHostname.getNumChars() == 0 ) { printf("%s\n",mailman.lastErrorText()); return; } printf("%s\n",(const char *)smtpHostname); // Set the SMTP server. mailman.put_SmtpHost(smtpHostname); // Create a new email object CkEmail email; email.put_Subject("This is a test"); email.put_Body("This is a test"); email.put_From("Chilkat Support <support@chilkatsoft.com>"); email.AddTo("",recipient); success = mailman.SendEmail(email); if (success != true) { printf("%s\n",mailman.lastErrorText()); } else { printf("Mail Sent!\n"); } } |
© 2000-2013 Chilkat Software, Inc. All Rights Reserved.