Here’s a quick code snippet that configures SmtpClient to send email using Gmail’s SMTP server:
This can be frustratingly difficult to get right so I’ll run through each setting quickly.
DeliveryMethod: Set to SmtpDeliveryMethod.Network, the alternatives are copying the email to a directory for pickup by a different application. We want to connect directly to Gmail.
UseDefaultCredentials: False, as we’ll be providing our own credentials later. Setting properties in the right order is apparently important for SmtpClient, although the Microsoft documentation doesn’t mention this. Make sure you set UseDefaultCredentials to false before setting the Credentials property.
EnableSsl: True. SSL or TLS is required.
Host: smtp.gmail.com for this example. Note that this server restricts you to sending 2,000 emails per day. There is a less restrictive option for G Suite customers (smtp-relay.gmail.com) and a more restrictive server that can only send messages to Gmail or G Suite addresses (aspmx.l.google.com).
Port: Google says to use 465 for SSL and 587 for TLS. I’ve found that 587 with EnableSSL set to true works fine.
Credentials: Your Gmail address and password in a NetworkCredential. If your account has 2 step (multi factor) authentication then this won’t work. You can generate an app password easily and use this instead of your regular password. It’s also possible to use OAuth.
In the comments below Shika Helmy suggests also setting the Timeout property to 20000.
You can now use smtp.Send() to send the email.
Because it’s likely to be your personal account and there is a 2,000 message cap on sending I’d only recommend using this for small scale projects. You don’t want to get your Gmail account blocked. For higher volume I’d look at using SendGrid or similar.
One last note - while I’ve used SmtpClient for all sorts of trivial email needs over the years the latest Microsoft documentation marks it obsolete and warns:
SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead
Hope this expanded article helps. I still come back here periodically to cut and paste rather than mess up the property order again...
(Related: Get an email when your security camera sees something new (Apps Script + Cloud Vision); Using the Azure Monitor REST API from Google Apps Script; How to backup Google Photos to Google Drive automatically after July 2019 with Apps Script)