Docker - PHP - Sendmail

Jonny2k

New member
Hallo Leute, ich möchte gerne in meinem Dockerfile für PHP auch Sendmail integerieren.
Ich möchte die Mailfunktion so nutzen wie ich sie bei einer Xampp Installation nutzen kann, direkt ab Werk ohne irgendwelche SMTP Einstellungen oder sonstiges,
ich hoffe Ihr könnt mir helfen, ich hab jetzt echt schon viel probiert :(

Mein aktuelles Dockerfile ist folgendermaßen aufgebaut

Code:
FROM php:7.1-apache

# # Install dependencies
FROM php:7.1-apache

# Install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    libpq-dev \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl \
    sshpass \
    mariadb-client \
    jq \
    gettext-base \
    libssl-dev \
    zlib1g-dev libzip-dev sendmail \
    sendmail-cf \
    m4 \
    procmail

# # Install extensions
RUN docker-php-ext-install gd

# # Install Postgre PDO
RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
    && docker-php-ext-install pdo pdo_pgsql pgsql

# # Install Mysql PDO
RUN docker-php-ext-install mysqli pdo pdo_mysql \
    && docker-php-ext-enable pdo_mysql
    
RUN docker-php-ext-install zip

    
# Configure Sendmail

# Create sendmail configuration for PHP
RUN echo "sendmail_path=/usr/sbin/sendmail -t -i" >> /usr/local/etc/php/conf.d/sendmail.ini

# Add default gateway IP and hostname to hosts file

RUN sed -i '/#!\/bin\/sh/aservice sendmail restart' /usr/local/bin/docker-php-entrypoint
RUN sed -i '/#!\/bin\/sh/aecho "$(hostname -i)\t$(hostname) $(hostname).localhost" >> /etc/hosts' /usr/local/bin/docker-php-entrypoint


# Expose sendmail daemon
EXPOSE 25

    
RUN apt-get update -y \
  && apt-get install -y \
     libxml2-dev \
  && apt-get clean -y \
  && docker-php-ext-install soap

# Installieren von Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
    && php -r "unlink('composer-setup.php');"
    

# Installieren Sie notwendige Pakete
RUN apt-get update \
    && apt-get install -y openssl \
    && rm -rf /var/lib/apt/lists/*

# Erstellen Sie ein selbstsigniertes Zertifikat
RUN openssl genrsa -out /etc/ssl/private/mykey.key 2048 \
    && openssl req -new -key /etc/ssl/private/mykey.key -out /etc/ssl/certs/mycsr.csr -subj "/C=DE/ST=YourState/L=YourCity/O=YourOrganization/OU=YourUnit/CN=yourdomain.com" \
    && openssl x509 -req -days 365 -in /etc/ssl/certs/mycsr.csr -signkey /etc/ssl/private/mykey.key -out /etc/ssl/certs/mycert.crt \
    && rm /etc/ssl/certs/mycsr.csr

# Aktivieren Sie Apache-Module
RUN a2enmod ssl
RUN a2enmod rewrite
    

# Setzen Sie das Apache Document Root auf das Laravel public Verzeichnis
ENV APACHE_DOCUMENT_ROOT /var/www/html

EXPOSE 80
EXPOSE 443

Danke schon mal im voraus.

LG
Jonny
 
Moin,

was genau funktioniert denn nicht, bzw. wie sieht eine evtl. vorhandene Fehlermeldung aus?

Ich hab von dem ganzen Wegzeugs keine Ahnung, allerdings gäbe es da noch "php-mail"-Paket :
php-mail - Class that provides multiple interfaces for sending emails
Keine Ahnung, ob das noch irgendwie relevant ist...

Davon ab: "Einfach so" sollte man Mails auch nicht an externe Mailserver verschicken. Wenn Du lokal etwas laufen hast, eine Sache, wenn nicht, eine ganz andere (vor allem ohne vorherige Authentifizierung an einem zugelassenen Mailserver). Ist aber ein ganz anderes Thema, kann man sich ggf. später noch mit befassen... Klären wir erstmal, was jetzt eigentlich genau bei Dir nicht funktioniert :)
 
Hi blurrrr,
erstmal Danke für deine Antwort, es geht mir nur darum ein Projekt lokal zum laufen zu bringen welches die mail funktion von PHP nutzt,
in PHP gibt es keine Probleme, da sieht es so aus als wenn die Mail raus geht, Sendmail ist aber anscheinend nicht richtig konfiguriert, so das die Mail stecken bleibt oder was auch immer.

"Davon ab: "Einfach so" sollte man Mails auch nicht an externe Mailserver verschicken."
Klar, da hast du vollkommen recht, die Mail Funktion läuft im Normalfall bei Xampp so und so möchte ich es Lokal auch weiterhin halten,
sobald PHP auf einen öffentlichen Server gespielt wird sollte Sendmail dort schon ordentlich konfiguriert sein :).

LG
 
Klar, da hast du vollkommen recht, die Mail Funktion läuft im Normalfall bei Xampp so und so möchte ich es Lokal auch weiterhin halten,
Ich glaub wir reden da nicht über das gleiche... Wenn Du mir von Deiner lokalen Kiste eine Mail schickst, welche aber nicht dazu berechtigt ist im Namen Deiner genutzten Domain Mails zu verschicken, wird mein Mailserver die Mail kurzerhand abweisen (Thema SPF). Sollte die Mail also rausgehen, wird sie von der Gegenseite (bei fehlerhafter Konfiguration) schlichtweg nicht angenommen.

EDIT: Ansonsten halt mal in die Logs vom Container schauen :)
 
Also wenn ich von meiner lokalen Maschine von Xampp aus eine Mail an meine Arbeit schreibe oder oder auf meine web.de oder gmail Adressen gibt es keine Probleme, dort werden sie alle ganz normal angezeigt.
 
Statische IP Zuhause / auf der Arbeit? Schau Dir mal die SPF-Records in der Windows-Eingabeaufforderung an:

nslookup -q=txt <Sender-Domain> | find "spf"

Da muss irgendwas stehen, was Deine öffentliche IP (am Standort Deiner Workstation) zum senden berechtigt. Falls das nicht der Fall ist - da bin ich mir ziemlich sicher - wird die Mail eher via Relay verschickt.

Du kannst doch auch mal in die Einstellung Deiner XAMPP-Installation schauen, dort muss ja auch entsprechendes konfiguriert sein. Sendmail kann man halt auch so konfigurieren, dass es eine Mail zunächst an einen Relay-Server übergibt, welcher die Mail dann "offiziell" rausschickt. Ähnlich wie bei einem Mailcient, der schickt die Mail ja auch nicht komplett eigenständig raus, sondern übergibt die Mail an seinen Mailserver (der zum senden im Kontext der gewünschten Domain berechtigt ist), welcher sie dann an den Ziel-Mailserver sendet.

Wenn Du Dir via XAMPP eine Mail schickst und Dir dort mal den Mail-Header anschaust, kann man den Weg so einer Mail auch ganz gut nachverfolgen. Dort sollte dann eigentlich auch der zuständige Mailserver für Deine genutzte Domain auftauchen - der bekommt die Mail und schickt sie raus. Andernfalls schickt der Client die Mail direkt an den Ziel-Mailserver, der schaut nach, ob Deine IP überhaupt zum senden berechtigt ist (das wird sie normalerweise nicht sein) und das war es dann auch für die Mail.

Kleiner Nachtrag: Ich hab Dir mal kurz was rausgesucht: *klick* da sind nebst dem Relay-Thema (inkl. Authentifizierung) auch direkt noch die Mail-Maskierungen beschrieben. Kannst da ja mal gegenprüfen, wie das bei Deiner XAMPP-Installation konfiguriert ist :)
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.675
Beiträge
47.716
Mitglieder
4.320
Neuestes Mitglied
gagaga
Zurück
Oben