Jak mogę wysłać moją pocztę PHP?

71

Zainstalowałem Ubuntu 11.04, LAMP za pomocą tasksel.

Uważam, że PHP mail()nie działa.

Przypuszczam, że muszę to włączyć czy coś? W jaki sposób mogę to zrobić?

JM w pracy
źródło
Jest to proste i łatwe do wysłania z Gmaila. kvcodes.com/2016/03/send-e-mail-localhost-ubuntu-php
Kvvaradha

Odpowiedzi:

51

Z podręcznika poczty php:

Wymagania

Aby funkcje poczty były dostępne, PHP wymaga zainstalowanego i działającego systemu poczty elektronicznej. Program, który ma być używany, jest określony przez ustawienia konfiguracyjne w pliku php.ini.

Oznacza to, że musisz zainstalować jakiś serwer pocztowy i skonfigurować php, aby go używał. Zazwyczaj ten serwer pocztowy ma Postfix w Ubuntu. Jednak - jeśli kodowana strona php zostanie ostatecznie zapisana po stronie usługi hostingowej (np. Xmission), serwer poczty najprawdopodobniej już tam będzie zainstalowany. W takim przypadku po prostu przetestuj swoją witrynę online zamiast lokalnie.

Jeśli chcesz przetestować go we własnym systemie lub zamierzasz go hostować na własnym serwerze domowym, wykonaj następujące czynności:

Instalacja Postfix

Instalacja: postfix Zainstaluj postfiks / sudo apt-get install postfix Podczas tego procesu zostaniesz zapytany, w jakim trybie chcesz zainstalować Postfix. Istnieją cztery możliwe tryby:

  • Internet : Twój własny serwer pocztowy.
  • Satelita : Zewnętrzny dostawca poczty (np. Google) będzie używany do wysyłania i odbierania poczty. Serwer nie otrzyma żadnej poczty.
  • Smarthost : Mieszanka między nimi. Poczta jest przechowywana lokalnie, ale wysyłana przez zewnętrznego dostawcę poczty.
  • Tylko lokalnie : nie dotyczy ciebie. To systemowy wewnętrzny serwer pocztowy. Możesz wysyłać wiadomości e-mail od użytkownika do użytkownika w systemie.

Pozostałe opcje instalacji zależą od wyboru tej ogólnej konfiguracji.

Najprawdopodobniej wybierzesz instalację satelitarną. Oznacza to, że poczta zostanie wysłana za pośrednictwem zewnętrznego dostawcy. Jako serwer smtp (serwer poczty wychodzącej) będziesz musiał określić swoich dostawców smtp. Pozostałe opcje są oczywiste.

Konfiguracja po instalacji

Większość serwerów smtp wymaga uwierzytelnienia hasłem, aby wysłać pocztę. Postfix będzie musiał znać to hasło. Są też takie rzeczy, jak szyfrowanie, które należy wziąć pod uwagę (które trzeba będzie google). Oto jak skonfigurować postfiks za pomocą uwierzytelniania hasła (sasl):

  • Zainstaluj moduły libsasl2Zainstaluj moduły libsasl2 i sasl2-bin Zainstaluj sasl2-bin , klikając ikony Centrum oprogramowania lub z terminalu, używając:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Włącz sasl-auth, dodając te wiersze do /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • Utwórz plik /etc/postfix/sasl_passwordz linią taką jak:

     smtp.gmail.com [email protected]:USERPASSWORD
    

    Zastąp rzeczywiste hasło, nazwę użytkownika i adres smtp.

  • Zaktualizuj postfiks:

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    Można mieć na celu obejście „Permission denied” błąd przez chown postfix:postfix /etc/postfixwcześniej.

To powinno zrobić to w większości przypadków. Jednak niektórzy dostawcy smtp wymagają określonego adresu jako nadawcy lub szyfrowania.

Powiązane: Interfejs PEAR :: Mail może Cię również zainteresować.

Gmail (i być może inne usługi) może nie podobać się, że próbujesz wysłać pocztę w ten sposób, ponieważ może to być uznane za niepewne ze względu na ich standardy, i może zablokować twoją próbę, tj. Nic się nie wydarzy na ekranie ani gdzieś w całym procesie nie zostanie zablokowany twoje uwierzytelnienie. Również twój POP3 musi być włączony.

Aby temu przeciwdziałać, zobacz tutaj. (Jeśli chcesz być bezpieczny, utwórz fałszywe konto Gmail)

dezorientować
źródło
Wysyłanie poczty z Ubuntu (lokalne) działa. Ale co jeśli chcę, aby mój system Windows używał tego komputera do wysyłania poczty (również PHP)? Jak to skonfigurować?
JM at Work
Nie jestem pewien, czy dostaję pytanie. Możesz szlifować z komputera Ubuntu. Teraz, co chcesz zrobić, to wysłać mal za pośrednictwem tego komputera Ubuntu z komputera z systemem Windows za pośrednictwem php? Czy to jest poprawne?
con-f-use
2
Teraz pakiet libsasl2 nie istnieje. Używam 11.04. Jego libsasl2-2 jak na zaktualizowany pakiet ..
mythicalcoder
61

Jak już wspomniano, postfiks byłby przesadą, gdybyś tylko musiał wysyłać e-maile z php podczas tworzenia aplikacji na komputerze domowym.

Osobiście używam bardzo prostego i lekkiego pakietu ssmtp. Będzie używać dowolnego serwera smtp do wysyłania wychodzących wiadomości e-mail. Zainstaluj, uruchamiając:

sudo apt-get install ssmtp

Następnie edytuj /etc/ssmtp/ssmtp.confplik, skomentuj istniejącą linię mailhub i dodaj następujące linie (ten przykład dotyczy serwera smtp gmail):

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(Podaj swoją nazwę użytkownika i hasło do Gmaila. Oczywiście możesz użyć dowolnego innego serwera SMTP).

Teraz upewnij się, że twój php.ini ma poprawne sendmail_path. Powinien on brzmieć:

sendmail_path = /usr/sbin/sendmail -t

( Z komentarzy @ dima-l i @ omar-sabic : Nie musisz ssmtptutaj określać , ponieważ instalacja powinna utworzyć dowiązanie symboliczne /usr/sbin/sendmail, na które poprawnie wskazuje ssmtp. W przeciwnym razie musisz określić sendmail_path = /usr/sbin/ssmtp -t)

Ponownie załaduj apache, a twój php powinien móc teraz wysyłać wychodzące wiadomości e-mail.

Dima L.
źródło
3
Myślę, że miałeś na myśli sendmail_path = /usr/sbin/ssmtp -t. Udało się, dzięki
Omer Sabic,
1
ssmtp powinien utworzyć dowiązanie symboliczne /usr/sbin/sendmail, które poprawnie wskazuje na ssmtp. Tak więc używanie również sendmail_path = /usr/sbin/sendmail -tpowinno działać
Dima L.
2
Więcej informacji na temat konfigurowania ssmtp(znalazłem przydatne uwagi): Jak skonfigurować pocztę PHP w Debianie - to pytanie + ten link pomogło skonfigurować program.
gskema
1
W przypadku Gmaila należy skonfigurować konto Google, aby umożliwić działanie „niebezpiecznych aplikacji”. Zobacz support.google.com/accounts/answer/6010255
aesede
1
Musiałem także dodać następujący wiersz: FromLineOverride=YESaby uniknąć następującego błędu:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons,
29

PHP wymaga klienta SMTP do wysyłania poczty. Możesz zainstalować w pełni funkcjonalny agent przesyłania poczty (MTA), taki jak Postfix, aby obsługiwać tę funkcję, ale jest to przesada, jeśli potrzebujesz tylko wysłać pocztę przez PHP. Zamiast tego zainstaluj msmtp . Jest lekki i znacznie prostszy w konfiguracji.

Zainstaluj msmtp

sudo apt-get install msmtp-mta ca-certificates

Skonfiguruj to

Utwórz nowy plik konfiguracyjny:

sudo vi /etc/msmtprc

... z następującymi informacjami o konfiguracji:

# Set defaults.
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL

Musisz zastąpić dane konfiguracyjne reprezentowane przez wszystko w „<” i „>” (włącznie, usuń je). W przypadku hosta / nazwy użytkownika / hasła użyj normalnych poświadczeń do wysyłania poczty za pośrednictwem swojego dostawcy poczty.

Powiedz PHP, aby go używał

sudo vi /etc/php5/apache2/php.ini

Dodaj tę pojedynczą linię:

sendmail_path = /usr/bin/msmtp -t
colan
źródło
Oczywiście 'sudo vi /etc/php5/conf.d' bez php.ini nie będzie działać. W moim przypadku (Ubuntu) musiałem edytować „/etc/php5/apache2/php.ini”, a także ponownie uruchomić apache „sudo /etc/init.d/apache2 reload”, aby działał.
Dejan,
1
BTW, możesz przetestować konfigurację msmtprc, używając:cat <<EOF | msmtp <[email protected]> Subject: test This is a test! EOF
Dejan
Byłoby miło, ale to nie działa dla mnie. Nic nie pojawia się w dzienniku. Wydaje się całkowicie w porządku, ale nie ma kości.
James T Snell,
2
Aby msmtp był dostępny w całym systemie, zainstaluj „msmtp-mta”.
colan
1
Jeśli jesteś zbyt dosłowny, jak ja w poniższych instrukcjach, tak naprawdę nie trzymaj nawiasów <> w pliku konfiguracyjnym. Zajęło mi to dobre 20 minut, żeby to zrozumieć
de Raad,
4

Powinno być prostym rozwiązaniem. Musisz tylko zainstalować Postfix, który będzie wysyłał e-maile.

sudo apt-get install postfix

Chcesz uruchomić to z terminala (a nie centrum oprogramowania), ponieważ musi zadać ci kilka pytań konfiguracyjnych. Powinieneś znaleźć akceptację wszystkich wartości domyślnych (tylko lokalnie itp.).

Oli
źródło
2

To stare pytanie i powyżej są godne odpowiedzi, ale potrzebowałem eximdla mojego środowiska. Ponadto potwierdź, że masz zainstalowany sendmail ( $ which sendmail- powinien zwrócić coś takiego jak / usr / sbin / sendmail). Znalazłem dobry przewodnik na linode.com , ale sedno jest następujące:

apt-get install exim4-daemon-light mailutils

śledzony przez:

dpkg-reconfigure exim4-config

który przeniesie Cię do interaktywnego edytora.

vrobinson
źródło
1

Świetna odpowiedź , con-f-use.

Muszę dodać jedną rzecz do „fałszywego konta Gmail”:

Jest to wysoce zalecane, ponieważ musisz skonfigurować konto Gmail, aby zezwalać na mniej bezpieczne aplikacje: https://www.google.com/settings/u/0/security/lesssecureapps W przeciwnym razie otrzymasz „zaloguj się za pomocą przeglądarki internetowej a następnie spróbuj ponownie ”błąd w /var/log/mail.logpliku.

również okazało się, że pojawia się błąd przekroczenia limitu czasu, chyba że wyślę smailp z Gmaila do serwera certyfikatu głównego. Aby to zrobić:

sudo nano /etc/postfix/main.cf

dodaj następujące na dole pliku

smtp_tls_CAfile = /etc/postfix/cacert.pem

Następnie skopiuj certyfikat thawte root do cacert.pempliku:

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Oto link, którego użyłem: Skonfiguruj Postfix do używania Gmail SMTP na Ubuntu | EasyEngine

Mam nadzieję, że uratuje to komuś kilka mieszków włosowych ...

zastępca_D
źródło
0

Odkryłem, że rozwiązania dostarczone przez Dima L. są najłatwiejszym i najlżejszym sposobem na system.

Tylko jakiś dodatek dla większej przejrzystości ustawień. Powinieneś skomentować hostnamew /etc/ssmtp/ssmtp.confpliku. Przykładowy ssmtp.confplik jest jak poniżej:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
[email protected]
AuthPass=YOUREMAILPASSWORD

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
SD.
źródło