PHP Mail via SMTP-Auth

Aufgrund zahlreicher Spam EMails ist es heute leider bei vielen Providern nicht mehr sinnvoll möglich EMails aus PHP-Scripten via mail() abzusetzen.
Die EMails werden, im Gegensatz zum Versand via SMTP-Auth im EMail-Programm sehr häufig als Spam zurückgewiesen.

Es ist garnicht so schwierig eine EMail via fsockopen und fgets zu versenden.

Hier das kleines PHP-Script ohne jede Schöpfungshöhe:

<?php
$MTo       = "empfaenger@example.net";
$MToName   = "Empfaengername";
$MFrom     = "absender@example.net";
$MFromName = "Absendername";
$MSubject  = "Die Betreffzeile der EMail!";
$MMessage  = "World, Hello!";
SendSMTPMail( $MFrom, $MFromName, $MTo, $MToName, $MSubject, $MMessage );
?>


<?php
function SendSMTPMail( $MFrom, $MFromName, $MTo, $MToName, $MSubject, $MMessage )
  {
    $smtpServer   = "smtp.strato.de";
    $smtpPort     = "25";
    $timeout      = "30";
    $username     = "EMail-Adresse als Benutzername";
    $password     = "Passwort für den SMTP Server";
    $localhost    = "h12345.stratoserver.net";
    $newLine      = "\r\n";
    $smtpConnect  = fsockopen( $smtpServer, $smtpPort, $errno, $errstr, $timeout );
    $smtpResponse = fgets( $smtpConnect, 515 );
    if ( empty( $smtpConnect ) )
      {
        $output = "Failed to connect: $smtpResponse";
        return $output;
      }
    fputs( $smtpConnect, "AUTH LOGIN" . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
    fputs( $smtpConnect, base64_encode( $username ) . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
    fputs( $smtpConnect, base64_encode( $password ) . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
    fputs( $smtpConnect, "HELO $localhost" . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
    fputs( $smtpConnect, "MAIL FROM: $MFrom" . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
    fputs( $smtpConnect, "RCPT TO: $MTo" . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
    fputs( $smtpConnect, "DATA" . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
    $headers      = "MIME-Version: 1.0" . $newLine;
    $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
    $headers .= "To: $MToName <$MTo>" . $newLine;
    $headers .= "From: $MFromName <$MFrom>" . $newLine;
    fputs( $smtpConnect, "To: $MTo\nFrom: $MFrom\nSubject: $MSubject\n$headers\n\n$MMessage\n.\n" );
    $smtpResponse = fgets( $smtpConnect, 515 );
    fputs( $smtpConnect, "QUIT" . $newLine );
    $smtpResponse = fgets( $smtpConnect, 515 );
  }
?>

Linux anwendungen statisch kompilieren

Manchmal ist es praktisch Programme unabhängig von installierten Bibliotheken ausführen zu können.
In diesem Fall einfach mit folgenden Optionen kompilieren.

./configure --enable-static --disable-shared
make  CFLAGS="-g -O2 --static"

„Hallo Welt“ in C detailliert erklärt

Hallo Welt in C99:

#include

int main(void){
printf("hello world!\n");
return 0;
}

Explain the Source:

Zeile 1:
holen der stdio.h aus der standart C Bibiothek welche unter anderem die Funktion printf für die Textausgabe in Zeile 4 enthält.

Zeile 3:
Definition der Funktion mit dem Namen main welche einen int Wert als Rückgabe liefern wird, void bedeutet hierbei das an diese Funktion keine Werte übergeben werden.

Zeile 4:
Es wird die Funktion printf ausgeführt, welche den übergebenen Text in die Standartausgabe zurückgibt. Die Zeichenfolge „\n“ erzeugt einen Unix Zeilenumbruch. (DOS „\r\n“, MAC „\r“)

Zeile 5:
Die Funktion main wird abgebrochen und 0 als Fehlercode übergeben. 0 bedeutet das das Programm fehlerfrei beendet wurde.