Envoyer des mail en php

Bonjours,
encore un problème avec ce linux, je voulais utiliser un cron et un petit code pour m’envoyer un mail.
C’est pas que je n’y arrive pas en passant pas la console avec un script bash(c’est ça le nom ?), mais je trouve ça plus simple a faire en PHP(je connais mieux) et au moins je peut utiliser le code pour diverse chose.

Généralement je code sur mon windows et test sur linux(pour pas transférer le code toute les deux secondes pour tester).
Malheureusement des chose simple a faire(configurer wamp…(et encore)) ce retrouve parfois être un casse tête sous linux.

En bref: je veux pouvoir envoyer un mail en PHP avec Linux ou optionnel en ligne de commande sauf qu’aucun des deux ne marchent.
Pour ce faire sur windows j’ai du rajouter un logiciel appelé sendmail et configurer un fichier sendmail.ini ou j’y ai mit mon mdp, mon adresse gmail, l’adresse du serveur smtp de gmail.
En bref, je m’envoie des mail a moi même et ça marchent, mais sur Linux j’ai rien trouvé qui m’explique sauf celui la, mais ça ne marche toujours pas.

J’ai installé Postfix que j’ai essayé de configurer avec ce tuto sauf la première partie sans résultat.

Une fois que ça marchera j’aimerais y mettre avec un cron pour par exemple vérifié avec une condition toute les heures sinon envoyer un mail.
Ma question: est ce qu’on peut modifier le code associer au cron sans problème ou on doit le supprimer et en refaire un avec le nouveau code ?

Je précise que je suis en local et que je veux envoyer un mail sur mon adresse Gmail.

en PHP je fais ça :

mail($adresse,$titre,$message,$headers);

un peu d’info ici :

http://email.about.com/od/emailprogrammingtips/qt/Configure_PHP_to_Use_a_Local_Mail_Server_for_Sending_Mail.htm

Mais justement, j’ai un code qui marche en PHP, c’est sur Linux que je reçois rien.

dans le php.ini:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.gmail.com
; http://php.net/smtp-port
smtp_por= 587

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = mon_adresse@gmail.com


; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = /usr/sbin/postfix

; Force the addition of the specified parameters to be passed as extra paramete$
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
; Add X-PHP-Originating-Script: that will include uid of the script followed by$
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =

[quote=“LeRoutard”]Bonjours,
encore un problème avec ce linux, je voulais utiliser un cron et un petit code pour m’envoyer un mail.
C’est pas que je n’y arrive pas en passant pas la console avec un script bash(c’est ça le nom ?), mais je trouve ça plus simple a faire en PHP(je connais mieux) et au moins je peut utiliser le code pour diverse chose.

Généralement je code sur mon windows et test sur linux(pour pas transférer le code toute les deux secondes pour tester).
Malheureusement des chose simple a faire(configurer wamp…(et encore)) ce retrouve parfois être un casse tête sous linux.

En bref: je veux pouvoir envoyer un mail en PHP avec Linux ou optionnel en ligne de commande sauf qu’aucun des deux ne marchent.
Pour ce faire sur windows j’ai du rajouter un logiciel appelé sendmail et configurer un fichier sendmail.ini ou j’y ai mit mon mdp, mon adresse gmail, l’adresse du serveur smtp de gmail.
En bref, je m’envoie des mail a moi même et ça marchent, mais sur Linux j’ai rien trouvé qui m’explique sauf celui la, mais ça ne marche toujours pas.

J’ai installé Postfix que j’ai essayé de configurer avec ce tuto sauf la première partie sans résultat.

Une fois que ça marchera j’aimerais y mettre avec un cron pour par exemple vérifié avec une condition toute les heures sinon envoyer un mail.
Ma question: est ce qu’on peut modifier le code associer au cron sans problème ou on doit le supprimer et en refaire un avec le nouveau code ?

Je précise que je suis en local et que je veux envoyer un mail sur mon adresse Gmail.[/quote]

Il te faut configurer Postfix comme système satellite avec un serveur relais (celui de ton FAI)

dpkg-reconfigure postfix

voir ici postfix-satellite-t40981.html#p414374

ensuite tu peux rediriger les mails reçus par un utilisateur linux (root en principe) vers ton compte gmail :

éditer le fichier /etc/postfix/aliases

ajouter une ligne :
root : moi@gmail.com

puis faire un

newaliases

ensuite tester l’envoi de mail, et vérifier les logs de postfix

tail /var/log/mail.log

[quote] No configuration â
â Internet Site â
â Internet with smarthost â
â Satellite system â
â Local only [/quote]

Je prends donc Satellite system ? Pourquoi tu dis que je dois prendre le smtp de mon Fai ? Il va pas celui de Google comme j’envoie mes mail sur mon adresse Gmail ? C’est ce que je fais sur Windows, j’ai mit mon adresse, mdp… et ça marche.

J’ai pas de /etc/postfix/aliases je dois le crée ? je met quoi exactement ?

Utiliser le relay smtp de son FAI, c’est le plus simple je trouve.
Pour celui de google il y a sans doute une config supplémentaire à faire (cf ton tuto). Je ne l’utilise pas personnellement.

le fichier aliases est créé par l’assistant de configuration de postfix, une fois toute la procédure terminée.

[quote]# dpkg-reconfigure postfix [ ok ] Stopping Postfix Mail Transport Agent: postfix.
setting synchronous mail queue updates: true
mailname is not a fully qualified domain name. Not changing /etc/mailname.
setting destinations: smtp.orange.fr
setting relayhost: smtp.orange.fr
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_command
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: loopback-only
setting inet_protocols: ipv4
WARNING: /etc/aliases exists, but does not have a root alias.

Postfix is now set up with the changes above. If you need to make changes, edit
/etc/postfix/main.cf (and others) as needed. To view Postfix configuration
values, see postconf(1).

After modifying main.cf, be sure to run ‘/etc/init.d/postfix reload’.

Running newaliases
[ ok ] Stopping Postfix Mail Transport Agent: postfix.
[ ok ] Starting Postfix Mail Transport Agent: postfix.

[/quote]
/etc/aliases exists Je dois mettre quoi exactement dedans ? Je dois le supprimer pour que Postfix le crée lui même ?

Ca changera quoi avec mon Fai ? les mail partirons depuis qu’elle adresse ?

[quote]ensuite tu peux rediriger les mails reçus par un utilisateur linux (root en principe) vers ton compte gmail :

éditer le fichier /etc/postfix/aliases

ajouter une ligne :
root : moi@gmail.com

puis faire un

newaliases

ensuite tester l’envoi de mail, et vérifier les logs de postfix

tail /var/log/mail.log[/quote]

j’ai donc ouvert ce fichier aliases dans /etc et j’y ai mit root: adresse ensuite j’ai fait: sudo newaliases dans mail.log:

tail /var/log/mail.log Nov 24 13:33:59 raspberrypi postfix/error[16896]: 9CABC41437: to=<monmail@gmail.com>, relay=none, delay=143380, delays=143376/3.3/0/0.03, dsn=4.3.0, status=deferred (delivery temporarily suspended: local data error while talking to smtp.orange.fr[80.12.242.10]) Nov 24 13:33:59 raspberrypi postfix/error[16904]: A634041424: to=<monmail@gmail.com>, relay=none, delay=147566, delays=147563/3.3/0/0.04, dsn=4.3.0, status=deferred (delivery temporarily suspended: local data error while talking to smtp.orange.fr[80.12.242.10]) Nov 24 13:33:59 raspberrypi postfix/error[16897]: 01C5A41420: to=<monmail@gmail.com>, relay=none, delay=146932, delays=146928/3.3/0/0.05, dsn=4.3.0, status=deferred (delivery temporarily suspended: local data error while talking to smtp.orange.fr[80.12.242.10]) Nov 24 13:33:59 raspberrypi postfix/error[16906]: 0CA294143F: to=<monmail@gmail.com>, relay=none, delay=222376, delays=222373/3.2/0/0.05, dsn=4.3.0, status=deferred (delivery temporarily suspended: local data error while talking to smtp.orange.fr[80.12.242.10]) Nov 24 13:34:00 raspberrypi postfix/error[16902]: 037CE41422: to=<monmail@gmail.com>, relay=none, delay=222376, delays=222372/3.3/0/0.03, dsn=4.3.0, status=deferred (delivery temporarily suspended: local data error while talking to smtp.orange.fr[80.12.242.10]) Nov 24 13:34:00 raspberrypi postfix/error[16898]: 0E9724142D: to=<monmail@gmail.com>, relay=none, delay=143929, delays=143926/3.3/0/0.03, dsn=4.3.0, status=deferred (delivery temporarily suspended: local data error while talking to smtp.orange.fr[80.12.242.10]) Nov 24 13:34:02 raspberrypi postfix/pickup[16855]: C95E440FC4: uid=1000 from=<pi> Nov 24 13:34:02 raspberrypi postfix/cleanup[16943]: C95E440FC4: message-id=<20121124133402.C95E440FC4@raspberrypi> Nov 24 13:34:02 raspberrypi postfix/qmgr[16856]: C95E440FC4: from=<pi@raspberrypi>, size=432, nrcpt=1 (queue active) Nov 24 13:34:02 raspberrypi postfix/error[16904]: C95E440FC4: to=<monmail@gmail.com>, relay=none, delay=0.27, delays=0.24/0/0/0.02, dsn=4.3.0, status=deferred (delivery temporarily suspended: local data error while talking to smtp.orange.fr[80.12.242.10])

UP S.V.P. :pray:

pas bon.

relance

dpkg-reconfigure postfix

tu dois tout laisser par défaut (système satellite bien sûr), sauf le serveur relais (smtp.orange.fr), et le nom de courrier (qui doit être valide).

Pour que le nom de courrier soit valide, tu peux utiliser la fonction dyndns de ta box, et créer un nom de domaine avec.

Je choisis donc Satellite system.
Après j’ai:

[quote]System mail name:
raspberrypi__[/quote]
Ensuite:

[quote]SMTP relay host (blank for none):
smtp.orange.fr__[/quote]
Ensuite que j’ai donc laissé vide:

[quote]Root and postmaster mail recipient:
___[/quote]

Vide aussi:

[quote]Other destinations to accept mail for (blank for none):
__[/quote]

J’ai mit non(trop de mail en file d’attente quand ça marchait pas):

[quote]Force synchronous updates on mail queue?
[/quote]

Pareil, j’ai rien touché:

[quote] Local networks:
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128________[/quote]

J’ai laissé par défaut oui:

[quote]Use procmail for local delivery?
[/quote]

Ensuite pareil j’ai rien touché:

[quote]Mailbox size limit (bytes):
0___[/quote]

Après il y a:

[quote]Local address extension character:
+_____[/quote]

Ensuite(ipv4, ça marquait un message d’erreur en ipv6):

[quote]Internet protocols to use:
all
ipv6
ipv4 [/quote]

J’espère que j’ai rien oublié


Après en ligne de commande:

ou en PHP aucun mail.
J’ai donc loupé un truc ? dans le php.ini je dois mettre quoi ? car aucun des deux marchent(ligne de commande et PHP).

Up, svp, j’ai l’impression de toucher au but^^

Je vois pas ou je bloque dans le paramétrage de postfix surtout que je sais pas quoi mettre dans le php.ini

Personne pour m’aider SVP ?

Bon, puisque c’est plus simple pour toi avec gmail comme smarthost, voilà un guide (comme quoi ça sert un moteur de recherche :033 )

serverfault.com/questions/119278 … a-port-587

avec cette méthode ton serveur n’a pas besoin d’avoir un nom FQDN résolvable depuis l’extérieur.

je viens de tester, ça fonctionne.

pense à purger complètemement ta config de postfix avant

apt-get purge postfix

puis

apt-get install postfix

enfin, pour ton alias root

nano /etc/aliases

ajouter la ligne :

root : moi@gmail.com

puis

newaliases

enfin test d’envoi

echo “couic” | mail -s “hello” root

vérif

tail /var/log/mail.log

Je sais pas si j’ai bien réussi, je suis nul en anglais, mais j’ai ça:

[quote]pi@raspberrypi /etc/postfix $ sudo /etc/init.d/postfix restart && sudo /etc/init.d/apache2 restart
[…] Stopping Postfix Mail Transport Agent: postfixpostmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postfix: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
. ok
[…] Starting Postfix Mail Transport Agent: postfixpostmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postfix: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
. ok
[…] Restarting web server: apache2[Sat Dec 01 16:18:52 2012] [warn] Useless use of AllowOverride in line 194 of /etc/apache2/apache2.conf.
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
… waiting .[Sat Dec 01 16:18:54 2012] [warn] Useless use of AllowOverride in line 194 of /etc/apache2/apache2.conf.
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
. ok
pi@raspberrypi /etc/postfix $ sudo echo “couic” | mail -s “hello” root
pi@raspberrypi /etc/postfix $ send-mail: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postdrop: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol

[/quote]
Un problème d’ip ? comment je fais pour le PHP.ini ? car j’aimerais les envoyer en php comme je le fais sous wamp.

merci de ta réponse

Tu as bien reçu ton mail de test?

que donne la commande

tail /var/log/mail.log

Faut y donner un peu du sien…

Non aucun mail, j’ai posté le message qui apparait quand je veux envoyé un mail:

[quote]pi@raspberrypi /etc/postfix $ sudo /etc/init.d/postfix restart && sudo /etc/init.d/apache2 restart
[…] Stopping Postfix Mail Transport Agent: postfixpostmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postfix: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
. ok
[…] Starting Postfix Mail Transport Agent: postfixpostmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmulti: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postfix: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
. ok
[…] Restarting web server: apache2[Sat Dec 01 16:18:52 2012] [warn] Useless use of AllowOverride in line 194 of /etc/apache2/apache2.conf.
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
… waiting .[Sat Dec 01 16:18:54 2012] [warn] Useless use of AllowOverride in line 194 of /etc/apache2/apache2.conf.
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
. ok
pi@raspberrypi /etc/postfix $ sudo echo “couic” | mail -s “hello” root
pi@raspberrypi /etc/postfix $ send-mail: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postdrop: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol

[/quote]

Dans mail.log:

[quote]
pi@raspberrypi /var/log $ tail mail.log
Dec 1 17:21:22 raspberrypi postfix/master[6555]: warning: process /usr/lib/postfix/smtp pid 6909 exit status 1
Dec 1 17:21:22 raspberrypi postfix/master[6555]: warning: /usr/lib/postfix/smtp: bad command startup – throttling
Dec 1 17:22:22 raspberrypi postfix/smtp[6912]: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
Dec 1 17:22:22 raspberrypi postfix/smtp[6912]: fatal: bad boolean configuration: smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = smtp_tls_security_level = may
Dec 1 17:22:23 raspberrypi postfix/master[6555]: warning: process /usr/lib/postfix/smtp pid 6912 exit status 1
Dec 1 17:22:23 raspberrypi postfix/master[6555]: warning: /usr/lib/postfix/smtp: bad command startup – throttling
Dec 1 17:23:24 raspberrypi postfix/smtp[6934]: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
Dec 1 17:23:24 raspberrypi postfix/smtp[6934]: fatal: bad boolean configuration: smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = smtp_tls_security_level = may
Dec 1 17:23:25 raspberrypi postfix/master[6555]: warning: process /usr/lib/postfix/smtp pid 6934 exit status 1
Dec 1 17:23:25 raspberrypi postfix/master[6555]: warning: /usr/lib/postfix/smtp: bad command startup – throttling
pi@raspberrypi /var/log $[/quote]

et pareil, en php aucun mail reçus.

Étant pas très fort en anglais j’ai peut être mal fait le tuto ?

bon, encore une fois, repart d’une config postfix propre.

une fois dpkg-reconfigure postfix effectué, ajoute manuellement ces lignes dans ton /etc/postfix/main.cf

relayhost = smtp.gmail.com:587
smtp_use_tls=yes
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options=noanonymous
smtp_sasl_tls_security_options=noanonymous

ensuite créé le fichier /etc/postfix/sasl_passwd, contenant

puis

postmap hash:/etc/postfix/sasl_passwd

enfin relance postfix et envoie ton mail de test

J’ai tout fait comme tu as dit, mais aucun mail reçus:

[quote]pi@raspberrypi /var/log $ tail mail.log
Dec 1 18:10:39 raspberrypi postfix/qmgr[7656]: 375CC411CB: from=pi@raspberrypi, size=407, nrcpt=1 (queue active)
Dec 1 18:10:39 raspberrypi postfix/cleanup[7670]: 5AA73411CA: message-id=20121201181039.375CC411CB@raspberrypi
Dec 1 18:10:39 raspberrypi postfix/qmgr[7656]: 5AA73411CA: from=pi@raspberrypi, size=530, nrcpt=1 (queue active)
Dec 1 18:10:39 raspberrypi postfix/local[7672]: 375CC411CB: to=root@raspberrypi, orig_to=, relay=local, delay=0.27, delays=0.16/0.05/0/0.05, dsn=2.0.0, status=sent (forwarded as 5AA73411CA)
Dec 1 18:10:39 raspberrypi postfix/qmgr[7656]: 375CC411CB: removed
Dec 1 18:10:39 raspberrypi postfix/smtp[7673]: error: open database /etc/postfix/sasl_passwd.db: No such file or directory
Dec 1 18:10:40 raspberrypi postfix/smtp[7673]: warning: hash:/etc/postfix/sasl_passwd is unavailable. open database /etc/postfix/sasl_passwd.db: No such file or directory
Dec 1 18:10:40 raspberrypi postfix/smtp[7673]: warning: hash:/etc/postfix/sasl_passwd lookup error for "smtp.gmail.com"
Dec 1 18:10:40 raspberrypi postfix/smtp[7673]: warning: 5AA73411CA: smtp_sasl_passwd lookup error
Dec 1 18:10:40 raspberrypi postfix/smtp[7673]: 5AA73411CA: to=monmail@gmail.com, orig_to=, relay=smtp.gmail.com[173.194.66.108]:587, delay=0.92, delays=0.04/0.23/0.65/0, dsn=4.3.0, status=deferred (local data error while talking to smtp.gmail.com[173.194.66.108])
pi@raspberrypi /var/log $
[/quote]

BORDEL!!! Je me suis dit, je vais refaire un petit “sudo postmap hash:/etc/postfix/sasl_passwd”, par ce que je savais pas si j’avais mit un sudo et j’ai reçus le mail!!!

Par contre ça ne marche pas en php et je veux surtout pouvoir le faire en php.

EDIT:
C’est bon j’ai mit:

Bonjours,
depuis que la fonction mail marche, je reçoit des mail bizarre:

[quote]Cron root@raspberrypi test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

à root
/etc/cron.daily/logrotate:
error: skipping “/var/log/apache2/access.log” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.
error: skipping “/var/log/apache2/error.log” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.

…[/quote]