Gültigen Email Header erstellen
-
Hallo,
ich bin mir nicht sicher ob ich im richten Forum bin, bitte nicht Böse sein.
Ich versuche mit C und Sockets ein kleines Programm zu schreiben mit welchem es mir möglich ist Emails zu versenden.
Leider komme ich an der Stelle, wo ich den Header schreibe nicht weiter. Entweder ist der Text da oder ich habe einen Email Header.
Mein Code sieht wie folgt aus: (der Bereich ab dem ich DATA an den Mailserver sende. In der RFC finde ich leider keine Erklärung wie man den Header schreiben soll. Über Telnet hab ich es auch schon versucht, leider gibt es dort auch keine nähere Erklärung.
_sntprintf(szBuf, sizeof(szBuf), "DATA \r\n"); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf)); recv(s, szBuf, sizeof(szBuf), 0); //Check for Server Message if (strncmp(szBuf, "354", 3) != NULL) return SMTP_ERROR; _sntprintf(szBuf, sizeof(szBuf), "From: %s\r\n", pszFrom); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf)); _sntprintf(szBuf, sizeof(szBuf), "To: %s\r\n", pszTo); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf)); _sntprintf(szBuf, sizeof(szBuf), "Subject: %s \r\n", pszSubject); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf)); _sntprintf(szBuf, sizeof(szBuf), "X-Mailer: Mailtest\r\n"); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf)); _sntprintf(szBuf, sizeof(szBuf), "MIME-Version: 1.0\r\n"); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf)); _sntprintf(szBuf, sizeof(szBuf), "."); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf)); _sntprintf(szBuf, sizeof(szBuf), "%s\r\n", pszDaten); send(s, szBuf, (int)strlen(szBuf), 0); ZeroMemory(szBuf, sizeof(szBuf));Vielen Dank für Ideen.
-
Hmm, wenn ich mich recht erinnere sind die Email-Header nichts besonderes, das heißt, du sendest sie einfach am Anfang der Email mit.
-
Quelle: http://www.vijaymukhi.com/
int sendmail(char *name, char *addr, char *modelname) { int i; struct sockaddr_in A; SOCKET S; struct hostent *H; char R[10000]; S = socket(AF_INET, SOCK_STREAM, 0); A.sin_family = AF_INET; A.sin_port = htons(25); H = gethostbyname("giasbm01.vsnl.net.in"); A.sin_addr.s_addr = *((unsigned long *)H->h_addr); connect(S, (struct sockaddr *)&A, sizeof(A)); recv(S, R, sizeof(R), 0); _snprintf(R, sizeof(R), "HELO test.com\r\n"); send(S, R, strlen(R), 0); recv(S, R, sizeof(R), 0); _snprintf(R, sizeof(R), "MAIL FROM:<xyzcars@giasbm01.vsnl.net.in>\r\n"); send(S, R, strlen(R),0); recv(S, R, sizeof(R), 0); _snprintf(R, sizeof(R), "RCPT TO:<%s>\r\n", addr); send(S, R, strlen(R), 0); i = recv(S, R, sizeof(R), 0); if (i != 18) return -1; _snprintf(R, sizeof(R), "DATA\r\n"); send(S, R, strlen(R), 0); recv(S, R, sizeof(R), 0); _snprintf(R, sizeof(R), "To: %s\r\n", name); send(S, R, strlen(R), 0); _snprintf(R, sizeof(R), "FROM: xyzcars@giasbm01.vsnl.net.in\r\n"); send(S, R, strlen(R), 0); _snprintf(R, sizeof(R), "DATE: 10 Jan 95 13:24 PST\r\n"); send(S, R, strlen(R), 0); _snprintf(R, sizeof(R), "MESSAGE_ID: <123@e.com>\r\n"); send(S, R, strlen(R), 0); _snprintf(R, sizeof(R),"Thanks for registering with us .\r\n" "The Model you selected is :%s\r\n" "You will be hearing soon from us.\r\n", modelname); send(S, R, strlen(R), 0); _snprintf(R, sizeof(R), ".\r\n"); /* <- So endet der email-Text */ send(S, R, strlen(R), 0); recv(S, R, sizeof(R), 0); _snprintf(R, sizeof(R), "QUIT\r\n"); send(S, R, strlen(R), 0); recv(S, R, sizeof(R), 0); return 0; }
-
Vielen Dank für die Postings.
Hat mir sehr weitergeholten.