+
+ /* MAIL succeeded, now try the RCPT To: command */
+ sprintf(buf, "RCPT To: %s", addr);
+ sock_puts(sock, buf);
+ if (sock_gets(sock, buf) < 0) {
+ *status = 3;
+ strcpy(dsn, "Connection broken during SMTP conversation");
+ sock_close(sock);
+ return;
+ }
+ lprintf(9, "%s\n", buf);
+ if (buf[0] != '2') {
+ if (buf[0] == '4') {
+ *status = 3;
+ strcpy(dsn, &buf[4]);
+ sock_close(sock);
+ return;
+ }
+ else {
+ *status = 5;
+ strcpy(dsn, &buf[4]);
+ sock_close(sock);
+ return;
+ }
+ }
+
+
+ /* RCPT succeeded, now try the DATA command */
+ sock_puts(sock, "DATA");
+ if (sock_gets(sock, buf) < 0) {
+ *status = 3;
+ strcpy(dsn, "Connection broken during SMTP conversation");
+ sock_close(sock);
+ return;
+ }
+ lprintf(9, "%s\n", buf);
+ if (buf[0] != '3') {
+ if (buf[0] == '4') {
+ *status = 3;
+ strcpy(dsn, &buf[4]);
+ sock_close(sock);
+ return;
+ }
+ else {
+ *status = 5;
+ strcpy(dsn, &buf[4]);
+ sock_close(sock);
+ return;
+ }
+ }
+
+ /* If we reach this point, the server is expecting data */
+ CtdlOutputMsg(msgnum, MT_RFC822, 0, 0, NULL, sock, 1);
+ sock_puts(sock, ".");
+ if (sock_gets(sock, buf) < 0) {
+ *status = 3;
+ strcpy(dsn, "Connection broken during SMTP conversation");
+ sock_close(sock);
+ return;
+ }
+ lprintf(9, "%s\n", buf);
+ if (buf[0] != '2') {
+ if (buf[0] == '4') {
+ *status = 3;
+ strcpy(dsn, &buf[4]);
+ sock_close(sock);
+ return;
+ }
+ else {
+ *status = 5;
+ strcpy(dsn, &buf[4]);
+ sock_close(sock);
+ return;
+ }
+ }
+
+ /* We did it! */
+ strcpy(dsn, &buf[4]);
+ *status = 2;
+