Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Ruby) Send Email without Mail ServerHow to send an email without a mail server (so-to-speak).
require 'chilkat' # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. # 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. mailman = Chilkat::CkMailMan.new() recipient = "admin@chilkatsoft.com" # Do a DNS MX lookup for the recipient's mail server. smtpHostname = mailman.mxLookup(recipient) if (mailman.get_LastMethodSuccess() != true) print mailman.lastErrorText() + "\n"; exit end print smtpHostname + "\n"; # Set the SMTP server. mailman.put_SmtpHost(smtpHostname) # Create a new email object email = Chilkat::CkEmail.new() email.put_Subject("This is a test") email.put_Body("This is a test") email.put_From("My Name <myname@mydomain.com>") email.AddTo("",recipient) success = mailman.SendEmail(email) if (success != true) print mailman.lastErrorText() + "\n"; else print "Mail Sent!" + "\n"; end |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.