]> diplodocus.org Git - nmh/blobdiff - mts/smtp/smtp.c
Check that script(1) supports SHELL in test-version-check.
[nmh] / mts / smtp / smtp.c
index 3661200658356e0539dfcbc11f8cd680a9aaf7fb..c94ac31308063d2de637c531b857779b5051bae3 100644 (file)
@@ -441,9 +441,36 @@ rclient (char *server, char *service)
 }
 
 int
-sm_winit (char *from)
+sm_winit (char *from, int smtputf8, int eightbit)
 {
-    switch (smtalk (SM_MAIL, "MAIL FROM:<%s>", from)) {
+    const char *mail_parameters = "";
+
+    if (smtputf8) {
+        /* Just for information, if an attempt is made to send to an 8-bit
+           address without specifying SMTPUTF8, Gmail responds with
+           555 5.5.2 Syntax error.
+           Gmail doesn't require the 8BITMIME, but RFC 6531 Sec. 1.2 does. */
+        if (EHLOset ("8BITMIME")  &&  EHLOset ("SMTPUTF8")) {
+            mail_parameters = " BODY=8BITMIME SMTPUTF8";
+        } else {
+            sm_end (NOTOK);
+            return RP_UCMD;
+        }
+    } else if (eightbit) {
+        /* Comply with RFC 6152, for messages that have any 8-bit characters
+           in their body. */
+        if (EHLOset ("8BITMIME")) {
+            mail_parameters = " BODY=8BITMIME";
+        } else {
+            advise (NULL, "SMTP server does not support 8BITMIME, not sending.\n"
+                    "Suggest encoding message for 7-bit transport by setting your\n"
+                    "locale to C, and/or specifying *b64 in mhbuild directives.\n");
+            sm_end (NOTOK);
+            return RP_UCMD;
+        }
+    }
+
+    switch (smtalk (SM_MAIL, "MAIL FROM:<%s>%s", from, mail_parameters)) {
        case 250: 
            sm_addrs = 0;
            return RP_OK;
@@ -1012,7 +1039,7 @@ sm_sasl_callback(enum sasl_message_type mtype, unsigned const char *indata,
            *outdata = NULL;
            *outdatalen = 0;
        } else {
-           rc = decodeBase64(line + 4, (const char **) outdata, &len, 0, NULL);
+           rc = decodeBase64(line + 4, outdata, &len, 0, NULL);
            if (rc != OK) {
                netsec_err(errstr, "Unable to decode base64 response");
                return NOTOK;