examples/sendmail: Few fixes to make the example run on a local SMTP

server.
This commit is contained in:
Ouss4 2020-01-25 23:21:13 +00:00 committed by Gregory Nutt
parent 72a934c6c2
commit eb1af03259
4 changed files with 37 additions and 14 deletions

View File

@ -33,12 +33,24 @@ config EXAMPLES_SENDMAIL_DRIPADDR
---help---
The default router address. Default 10.0.0.1 (0x0a000001)
config EXAMPLES_SENDMAIL_SERVERADDR
hex "SMTP Server address"
default 0x0a000003
---help---
The SMTP Server address. Default 10.0.0.3 (0x0a000003)
config EXAMPLES_SENDMAIL_NETMASK
hex "Network Mask"
default 0xffffff00
---help---
The network mask. Default: 255.255.255.0 (0xffffff00)
config EXAMPLES_SENDMAIL_PORT
int "Server Port"
default 25
---help---
The SMTP server's port. Default 25.
config EXAMPLES_SENDMAIL_RECIPIENT
string "Recipient email"
default "Jane Doe <jane.doe@janedoemail.com>"

View File

@ -68,6 +68,14 @@
# error "You must provide CONFIG_EXAMPLES_SENDMAIL_DRIPADDR"
#endif
#ifndef CONFIG_EXAMPLES_SENDMAIL_SERVERADDR
# error "You must provide CONFIG_EXAMPLES_SENDMAIL_SERVERADDR"
#endif
#ifndef CONFIG_EXAMPLES_SENDMAIL_PORT
# error "You must provide CONFIG_EXAMPLES_SENDMAIL_PORT"
#endif
#ifndef CONFIG_EXAMPLES_SENDMAIL_NETMASK
# error "You must provide CONFIG_EXAMPLES_SENDMAIL_NETMASK"
#endif
@ -88,7 +96,6 @@
* Private Data
****************************************************************************/
static const char g_host_name[] = "localhost";
static const char g_recipient[] = CONFIG_EXAMPLES_SENDMAIL_RECIPIENT;
static const char g_sender[] = CONFIG_EXAMPLES_SENDMAIL_SENDER;
static const char g_subject[] = CONFIG_EXAMPLES_SENDMAIL_SUBJECT;
@ -105,6 +112,7 @@ static const char g_msg_body[] = CONFIG_EXAMPLES_SENDMAIL_BODY "\r\n";
int main(int argc, FAR char *argv[])
{
struct in_addr addr;
in_port_t port;
#if defined(CONFIG_EXAMPLES_SENDMAIL_NOMAC)
uint8_t mac[IFHWADDRLEN];
#endif
@ -150,11 +158,12 @@ int main(int argc, FAR char *argv[])
/* Then send the mail */
net_ipaddr(addr.s_addr, 127, 0, 0, 1);
addr.s_addr = HTONL(CONFIG_EXAMPLES_SENDMAIL_SERVERADDR);
port = HTONS(CONFIG_EXAMPLES_SENDMAIL_PORT);
handle = smtp_open();
if (handle)
{
smtp_configure(handle, g_host_name, &addr.s_addr);
smtp_configure(handle, CONFIG_LIB_HOSTNAME, &addr.s_addr, &port);
smtp_send(handle, g_recipient, NULL, g_sender, g_subject,
g_msg_body, strlen(g_msg_body));
smtp_close(handle);

View File

@ -68,8 +68,8 @@ extern "C"
****************************************************************************/
void *smtp_open(void);
void smtp_configure(FAR void *handle, FAR const char *localhostname,
FAR const in_addr_t *paddr);
void smtp_configure(FAR void *handle, FAR const char *hostname,
FAR const in_addr_t *paddr, FAR const in_port_t *port);
int smtp_send(FAR void *handle, FAR const char *to, FAR const char *cc,
FAR const char *from, FAR const char *subject,
FAR const char *msg, int msglen);

View File

@ -91,7 +91,8 @@ struct smtp_state
bool connected;
sem_t sem;
in_addr_t smtpserver;
const char *localhostname;
in_port_t port;
const char *hostname;
const char *to;
const char *cc;
const char *from;
@ -136,7 +137,7 @@ static inline int smtp_send_message(int sockfd, struct smtp_state *psmtp)
}
snprintf(psmtp->buffer, SMTP_INPUT_BUFFER_SIZE, "%s%s\r\n",
g_smtphelo, psmtp->localhostname);
g_smtphelo, psmtp->hostname);
if (send(sockfd, psmtp->buffer, strlen(psmtp->buffer), 0) < 0)
{
return ERROR;
@ -245,7 +246,7 @@ static inline int smtp_send_message(int sockfd, struct smtp_state *psmtp)
return ERROR;
}
snprintf(psmtp->buffer, SMTP_INPUT_BUFFER_SIZE, "%s%s\r\n",
snprintf(psmtp->buffer, SMTP_INPUT_BUFFER_SIZE, "%s%s\r\n\r\n",
g_smtpsubject, psmtp->subject);
if (send(sockfd, psmtp->buffer, strlen(psmtp->buffer), 0) < 0)
{
@ -295,12 +296,13 @@ static inline int smtp_send_message(int sockfd, struct smtp_state *psmtp)
* configured.
*/
void smtp_configure(FAR void *handle, FAR const char *lhostname,
FAR const in_addr_t *paddr)
void smtp_configure(FAR void *handle, FAR const char *hostname,
FAR const in_addr_t *paddr, FAR const in_port_t *port)
{
FAR struct smtp_state *psmtp = (FAR struct smtp_state *)handle;
psmtp->localhostname = lhostname;
net_ipv4addr_copy(psmtp->smtpserver, paddr);
psmtp->hostname = hostname;
net_ipv4addr_copy(psmtp->smtpserver, *paddr);
psmtp->port = *port;
}
/* Send an e-mail.
@ -345,8 +347,8 @@ int smtp_send(void *handle, const char *to, const char *cc, const char *from,
*/
server.sin_family = AF_INET;
memcpy(&server.sin_addr.s_addr, &psmtp->smtpserver, sizeof(in_addr_t));
server.sin_port = HTONS(25);
net_ipv4addr_copy(server.sin_addr.s_addr, psmtp->smtpserver);
server.sin_port = psmtp->port;
if (connect(sockfd, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) < 0)
{