diff --git a/examples/sendmail/Kconfig b/examples/sendmail/Kconfig index 93dfe94a9..4aa978014 100644 --- a/examples/sendmail/Kconfig +++ b/examples/sendmail/Kconfig @@ -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 " diff --git a/examples/sendmail/sendmail_main.c b/examples/sendmail/sendmail_main.c index 78021a248..ea9857dc1 100644 --- a/examples/sendmail/sendmail_main.c +++ b/examples/sendmail/sendmail_main.c @@ -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); diff --git a/include/netutils/smtp.h b/include/netutils/smtp.h index 684864c44..5d4c612ae 100644 --- a/include/netutils/smtp.h +++ b/include/netutils/smtp.h @@ -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); diff --git a/netutils/smtp/smtp.c b/netutils/smtp/smtp.c index c63861853..612d8a481 100644 --- a/netutils/smtp/smtp.c +++ b/netutils/smtp/smtp.c @@ -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) {