Răsfoiți Sursa

去除加密端口的证书强制认证,修复打开附件功能但不加附件引起的多余字符问题

WKJay 5 ani în urmă
părinte
comite
473e3549fb
3 a modificat fișierele cu 17 adăugiri și 7 ștergeri
  1. 1 0
      inc/smtp_client_private.h
  2. 13 2
      src/smtp_client.c
  3. 3 5
      src/smtp_client_tls.c

+ 1 - 0
inc/smtp_client_private.h

@@ -29,6 +29,7 @@
 #define SMTP_SEND_DATA_HEAD_MAX_LENGTH 256
 #define SMTP_SEND_DATA_MAX_LEN 512
 #define SMTP_RESPONSE_MAX_LEN 512
+#define SMTP_MAX_ATTACHMENTS 20
 
 #ifdef SMTP_CLIENT_USING_TLS
 //缓冲区大小

+ 13 - 2
src/smtp_client.c

@@ -43,7 +43,7 @@ smtp_session_t smtp_session;
  */
 int smtp_add_attachment(char *file_path, char *file_name)
 {
-    FILE *fp =  NULL;
+    FILE *fp = NULL;
     if (strlen(file_path) > SMTP_MAX_FILE_PATH_LEN)
     {
         LOG_E("attachment's file path too large");
@@ -711,6 +711,7 @@ static int smtp_set_sender_receiver(void)
  */
 static void smtp_send_attachment(void)
 {
+    uint16_t attachments_cnt = 0;
     uint8_t attachment_buf[SMTP_SEND_DATA_MAX_LEN];
     smtp_attachments_t *cur_attr = smtp_session.attachments;
     while (cur_attr)
@@ -719,6 +720,14 @@ static void smtp_send_attachment(void)
         if (fp)
         {
             uint32_t read_size = 0;
+            if (attachments_cnt < SMTP_MAX_ATTACHMENTS)
+            {
+                attachments_cnt++;
+            }
+            else
+            {
+                break;
+            }
             //发送附件头
             rt_memset(attachment_buf, 0, sizeof(attachment_buf));
             sprintf((char *)attachment_buf,
@@ -748,7 +757,9 @@ static void smtp_send_attachment(void)
         }
         cur_attr = cur_attr->next;
     }
-    smtp_write((uint8_t *)("--" SMTP_MAIL_BOUNDARY "--\r\n"), strlen("--" SMTP_MAIL_BOUNDARY "--\r\n"));
+
+    if (attachments_cnt > 0)
+        smtp_write((uint8_t *)("--" SMTP_MAIL_BOUNDARY "--\r\n"), strlen("--" SMTP_MAIL_BOUNDARY "--\r\n"));
 }
 
 /**

+ 3 - 5
src/smtp_client_tls.c

@@ -228,13 +228,11 @@ int smtp_mbedtls_starttls(MbedTLSSession *tls_session)
     //证书验证
     result = mbedtls_ssl_get_verify_result(&tls_session->ssl);
     if (result != 0)
-    {
+    {     
+        LOG_E("verify peer certificate fail....");
         memset(tls_session->buffer, 0x00, tls_session->buffer_len);
         mbedtls_x509_crt_verify_info((char *)tls_session->buffer, tls_session->buffer_len, "  ! ", result);
-        LOG_E(">smtp mbedtls crt verify fail");
-        mbedtls_client_close(tls_session);
-        LOG_I(">MbedTLS connection close");
-        return -1;
+        LOG_E("verification info: %s", tls_session->buffer);
     }
     return result;
 }