You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/01/25 22:35:27 UTC

[incubator-nuttx-apps] branch pr33 updated: examples/sendmail: Few fixes to make the example run on a local SMTP server.

This is an automated email from the ASF dual-hosted git repository.

gnutt pushed a commit to branch pr33
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git


The following commit(s) were added to refs/heads/pr33 by this push:
     new e9927db  examples/sendmail: Few fixes to make the example run on a local SMTP server.
e9927db is described below

commit e9927db692d91baea5d795a6b5e1906f39bfffbb
Author: Ouss4 <ab...@gmail.com>
AuthorDate: Sat Jan 25 23:21:13 2020 +0000

    examples/sendmail: Few fixes to make the example run on a local SMTP
    server.
---
 examples/sendmail/Kconfig         | 12 ++++++++++++
 examples/sendmail/sendmail_main.c | 15 ++++++++++++---
 include/netutils/smtp.h           |  4 ++--
 netutils/smtp/smtp.c              | 20 +++++++++++---------
 4 files changed, 37 insertions(+), 14 deletions(-)

diff --git a/examples/sendmail/Kconfig b/examples/sendmail/Kconfig
index 93dfe94..4aa9780 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 <ja...@janedoemail.com>"
diff --git a/examples/sendmail/sendmail_main.c b/examples/sendmail/sendmail_main.c
index 78021a2..ea9857d 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 684864c..5d4c612 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 c638618..612d8a4 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)
     {