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ć?
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ć?
Odpowiedzi:
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 / sudo apt-get install postfix
Podczas tego procesu zostaniesz zapytany, w jakim trybie chcesz zainstalować Postfix. Istnieją cztery możliwe tryby:
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.
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 libsasl2 i 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_password
z linią taką jak:
smtp.gmail.com USERNAME@gmail.com: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/postfix
wcześ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)
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.conf
plik, 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 ssmtp
tutaj 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.
sendmail_path = /usr/sbin/ssmtp -t
. Udało się, dzięki
/usr/sbin/sendmail
, które poprawnie wskazuje na ssmtp. Tak więc używanie również sendmail_path = /usr/sbin/sendmail -t
powinno działać
ssmtp
(znalazłem przydatne uwagi): Jak skonfigurować pocztę PHP w Debianie - to pytanie + ten link pomogło skonfigurować program.
FromLineOverride=YES
aby uniknąć następującego błędu:550 5.7.60 SMTP; Client does not have permissions to send as this sender
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 <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
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
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
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.).
To stare pytanie i powyżej są godne odpowiedzi, ale potrzebowałem exim
dla 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.
Ś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.log
pliku.
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.pem
pliku:
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 ...
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ć hostname
w /etc/ssmtp/ssmtp.conf
pliku. Przykładowy ssmtp.conf
plik 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
AuthUser=mail@yourdomain.com
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