+int SMTP_ehlo(FILE *sockfp, char *host, int *opt)
+/* send a "EHLO" message to the SMTP listener, return extension status bits */
+{
+ int ok;
+ char *ip;
+ struct opt *hp;
+
+ SockPrintf(sockfp,"EHLO %s\r\n", host);
+ if (outlevel == O_VERBOSE)
+ error(0, 0, "SMTP> EHLO %s", host);
+
+ *opt = 0;
+ while ((ip = SockGets(smtp_response, sizeof(smtp_response)-1, sockfp)))
+ {
+ int n = strlen(ip);
+
+ if (smtp_response[strlen(smtp_response)-1] == '\n')
+ smtp_response[strlen(smtp_response)-1] = '\0';
+ if (smtp_response[strlen(smtp_response)-1] == '\r')
+ smtp_response[strlen(smtp_response)-1] = '\r';
+ if (n < 4)
+ return SM_ERROR;
+ smtp_response[n] = '\0';
+ if (outlevel == O_VERBOSE)
+ error(0, 0, "SMTP< %s", smtp_response);
+ for (hp = extensions; hp->name; hp++)
+ if (!strncasecmp(hp->name, smtp_response+4, strlen(hp->name)))
+ *opt |= hp->value;
+ if ((smtp_response[0] == '1' || smtp_response[0] == '2' || smtp_response[0] == '3') && smtp_response[3] == ' ')
+ return SM_OK;
+ else if (smtp_response[3] != '-')
+ return SM_ERROR;
+ }
+ return SM_UNRECOVERABLE;
+}
+
+int SMTP_from(FILE *sockfp, char *from, char *opts)