four seconds (SMTP servers usually are very busy, because they have to send
a lot of spam), and then it reads all the data sent back by the server and
outputs it to the serial port for debugging purposes.
Before we can process responses, we have to send requests.
send_line
, beginning
in line 21, sends a single command to an SMTP server. You have to pass the
connection to the server as an
EthernetClient
instance, and the line you’d like
to send has to be a
String
object.
To send the data stored in a
String
object, we need to access the character data
it refers to. We can use
toCharArray
or
getBytes
to retrieve this information. These
two methods do not return a pointer to the string’s internal buffer. Instead,
they expect you to provide a sufficiently large
char
array and its size. That’s
why we copy
line
’s content to
buffer
before we output it to the serial and Ethernet
ports. After we’ve sent the data, we read the server’s response and print it to
the serial port.
There aren’t any surprised in the public interface. There are two constructors.
The first, on line 32, expects the SMTP server’s IP address and its port. If you
use it, the
SmtpService
class assumes you’re not using authentication.
To authenticate against the SMTP service using a username and a password,
you have to use the second constructor, starting in line 38. In addition to the
SMTP server’s IP address and port, it expects the username and password
encoded in Base64.
The
send_email
method is the largest piece of code in our class, but it’s also one
of the simplest. It mimics exactly our
telnet
session. The only thing worth
mentioning is line 57. Here we check whether authentication information has
been provided in the constructor. If not, we send the
HELO
command. If
authentication information has been provided, we send the
EHLO
command
and the corresponding authentication information.
Let’s use our classes now to actually send an email:
Ethernet/Email/Email.ino
#include <SPI.h>
Line 1
#include <Ethernet.h>
-
#include "smtp_service.h"
-
-
const unsigned int SMTP_PORT = 2525;
5
const unsigned int BAUD_RATE = 9600;
-
const String USERNAME = "bm90bXl1c2VybmFtZQ=="; // Encoded in Base64.
-
const String PASSWORD = "bm90bXlwYXNzd29yZA=="; // Encoded in Base64.
-
-
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
10
IPAddress my_ip(192, 168, 2, 120);
-
Chapter 11. Creating a Burglar Alarm with Email Notification • 192
report erratum • discuss
www.it-ebooks.info