sivut.web

ohjeita web-sivuston tekijälle

PHP-opas: Sähköpostin lähetys

Yksi palvelimella sijaitsevien skriptien yleisimmistä tarkoituksista on lähettää lomakkeesta kerätty data sähköpostiviestinä eteenpäin.

PHP:ssa on funktio mail, joka lähettää sähköpostia. Se toimii seuraavasti:

mail(
	vastaanottajan osoite,
	viestin otsikko,
	viesti,
	lisäkentät
);

Esimerkkilomakkeella ja -skriptillä voit lähettää itsellesi tervehdyksen sivut.web:istä sähköpostitse:

<html>
<head>
<title>lähetä itsellesi tervehdys</title>
</head>
<body>

<form action="sahkoposti.php" method="post">
<p>Sähköpostiosoitteesi<br>
<input type="text" name="osoite"></p>
<p>
<input type="submit" value="Lähetä tervehdys">
</p>
</form>

</body>
</html>
<html>
<head>
<title>tervehdys lähetetty</title>
</head>
<body>

<?
mail($osoite, "Tervehdys sivut.web:istä!", "
Hei,

Tämä on tervehdys sivut.webin PHP-oppaasta osoitteesta
http://www.sivut.org/php/oppaat/sahkopostin_lahetys.html.

",
"From: sivut.webin automaattinen tervehtijä <tervehdys@sivut.org>");
?>

<h2>Tervehdys lähetetty osoitteeseen <?echo $osoite?>.</h2>

</body>
</html>

esimerkit/sahkoposti.html
lähdekoodi (sahkoposti.php)

Seuraava sivu: MySQL-tietokantayhteys.


Käyttäjien kommentit

9.12.2003 10:57
FearMTC <mtcfear@suomi24.fi>

Warning: mail() [function.mail]: SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE. in xxx/xxx.php on line 67

12.12.2003 22:54
-

Virhe johtuu juurikin safe-modesta. Eli php ei hyväksy mail-funktion viidettä parametria. Lisätietoa mail-funktiosta http://fi.php.net/manual/en/function.mail.php ja safe-modesta http://fi.php.net/features.safe-mode

8.7.2004 01:16
Jarmo

Voiko mailin lähettää useammalle henkilölle lomakkeelta samalla kertaa? Esim. palautelomakkeen tiedot haluttaisiin lähettää useammalle henkilölle.

8.7.2004 08:42
Juha-Pekka Järvenpää <jp@sivut.org>

Toki monta sähköpostia voidaan lähettää. Samassa mail-funktion kutsussa erottele osoitteet pilkuilla tai lähetä kaksi eri sähköpostia (kaksi eri kutsua mail-funktiolle).

2.8.2004 21:08
ThePuska <thepuska@hotmail.com>

Warning: "sendmail_from" NOT set in php.ini in hakemisto on line 29

Tuollaista valittaa vaikka mitä tekisin...

3.8.2004 14:24
Juha-Pekka Järvenpää <jp@sivut.org>

Näyttäisi siltä, että sendmail_from -muuttujaa ei ole asetettu PHP:n asetuksissa. Jos et pääse muuttamaan palvelimen asetuksia, kokeilepa asettaa muuttuja lausella ini_set('sendmail_from',null); (asetettava ennen mail()-funktion kutsua).

Kannattaa vaivata suoraan palveluntarjoajaa tällaisessa asiassa, jos vaikka asettaisisivat PHP:n asetukset oikein.

16.12.2004 09:48
sebu <seba87@jippii.fi>

Päivää! testasin tätä sähköposti hommaa toisella serverillä.. Muutin koodia ja yritin säätä pientä omaa. Se kuitenkin haluaa tallentaa php tiedoston. Kun painaa lähetä niin selain kysyy mihin tämä php tiedosto tallennetaan. Olisiko mitään neuvoa asian korjaamiseksi vai onko se ihan vain serveristä kiinni?

16.12.2004 12:55
Juha-Pekka Järvenpää <jp@sivut.org>

Luulisin, että palvelimella ei ole PHP-tukea ja se lähettää koodin tekstinä selaimelle, joka ei osaa sitä näyttää vaan kysyy mitä sille tehdään, jolloin yksi vaihtoehto on tallentaa levylle.

19.12.2004 19:59
joni <joni.tolonen@telemail.fi>

Käykää joku kattomassa http://tolonen.100free.com mikä meni vikaan.

1.1.2005 23:13
joni

Mulla taas ei tapahdu mitään jos painaa lähetä napista.

22.1.2005 09:32
Heikki

Miten sähköpostin lähetykseen voi lisätä kunnon kiitos-sivun tavanomaisen 'echo' -kommentin sijasta. En löytänyt yksinkertaista esimerkkiä.

25.1.2005 00:02
Yay

hmm, ehkä includen avulla.. en mene mitään sanomaan minte ois mahollista.. pelkkä arvaus...

16.3.2005 15:58
Dragonslayer <janne.hepola@suomi24.fi>

Tein tommoisen palautelomakkeen, mutta kommentit eivä tule perille.Mistähän tämä johtuu??

9.4.2005 20:55
Ville S

PHP tuki löytyy palvelimeltani, jostakin kumman syystä noiden $osoite -tyyppisten asioiden poiminta ei toimi. Koetin laittaa tämän esimerkin palvelimelleni, ja kun koetan lähettää postia omaan osoitteeseeni, aukeaa sivu jossa lukee:
"Tervehdys lähetetty osoitteeseen ." eli tuon kirjoitetun osoitteen poiminta ei toimi. Mistähän mahtaa johtua? Jos muokkaan koodia siten, että kirjoitan osoitteeni suoraan, viesti kyllä tulee perille. Toivottavasti ymmärsitte mistä on kysymys :)

23.5.2005 20:13
heikki

Kokeilepa seuraavanlaista muutosta: $osoite --> $_POST["osoite"] ja kaikki muutkin muuttujat samaan tyyliin

12.7.2005 11:00
Morko @ morkolandia.com <multanenmikko@hotmail.com>

Teen tässä eräänlaista yhteydenottolomaketta ja olen vielä aika käsi tuon PHP:n kanssa, tullu meinaan aspilla väännettyy enemmän. Mut enivei, mites tuossa saa sit viestialueeseen monta noita formista haettuja tietoja peräkkäin jos tekee formiin enemmän tekstikenttiä (osoite, puhelinnumero, yms)

6.8.2005 10:56
Nico-Yoki

Voisiko näistä ohjeista laajentaa (tai tehdä uuden) MIME-pohjaisen sähköpostinlähetyksen, että mukaan saisi lisättyä liitteen & muut?

8.8.2005 11:35
Mfhi

Tämmönen juolahti mieleen et saisiko ton viestin ymmärtää jollai ilveellä html tagia? (meinaan vaa et boldia yms)

30.9.2005 22:33
Mika <mika.k7@luukku.com>

Method Not Allowed
The requested method POST is not allowed for the URL /*****/*****.php.

toi tulee vaan

1.10.2005 15:32
--

Ei kukaan tietäis ilmaista palvelinta joka tukee php? Oon löytäny muutaman mutta ne ei oo tukenu mail()

2.10.2005 10:53
kjf

Parse error: parse error in /data/members/free/tripod/uk/x/x/x/xxxx/htdocs/sahkoposti.php on line 2

26.11.2005 10:09
Mika

Oisko jokin keino saada nuo viestit menemään "Saapuneet"-kansioon roskapostin sijasta? (hotmailissa menee roskapostiin)

3.12.2005 16:49
jorgga

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in J:\apachefriends\xampp\htdocs\jorgga\vinkki.php on line 11

???

3.12.2005 16:49
jorgga

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in J:\apachefriends\xampp\htdocs\jorgga\vinkki.php on line 11

???

5.12.2005 23:53
TOK <tomiokorhonen@gmail.com>

Hyvää iltaa. Tämä on kyllä todella OK sivusto, paljon olen php:tä oppinut. Mutta sitten asiaan.

Olen pienillä muutoksilla jo saanut lähes toimivan palautelootan. Ainoa ongelma on tämä virheilmoitus, joka tulee tekstinä sivulle, kun on lähettänyt sen viestin sähköpostiin:

Warning: mail(): SMTP server response: 550 5.7.1 Unable to relay for tomiokorhonen@gmail.com in \\192.168.1.16\webfiles\files\2005-10\473473\lahetys.php on line 26

Muusta en ihan varma ole, mutta se koettaa kertoa, ettei serveri ihan luota tohon miun sähköpostiin. Eli en keksi oikein keinoa, miten sen saisi lähettämään sen postauksen. Kun noi on jotain turva-asetuksia.

Kiitos etukäteen avusta.

12.3.2006 22:13
m

okei, ole opettelemassa php:tä ja haluaisin kokeilla luoda lomakkeen, jossa nappia painamalla teksti lähetetään tiettyyn osoitteeseen. Palvelimen pitäisi tukea php:tä (ainakin päivämäärän asettaja esimerkeistä toimi). Olen muokannut kyseistä esimerkkiä seuraavanlaisesti:

HTML:

<html>
<head>
<title>lähetä teksti</title>
</head>
<body>
<form action="sahkoposti.php" method="post">
<p>tekstisi<br>
<input type="text" name="teksti"></p>
<p>
<input type="submit" value="Lähetä teksti">
</p>
</form>
</body>
</html>

PHP:

<html>
<head>
<title>teksti lähetetty</title>
</head>
<body>
<?mail("maili@maili.com", "viesti", "
$teksti;?>
<h2> Teksti on lähetetty </h2>
</body>
</html>

Tulee virheilmoitus:

Parse error: syntax error, unexpected $end in /home/users/tyyppi/sites/tyyppi.kapsi.fi/www/sahkoposti.php on line 10

Olenko käsittänyt homman ihan väärin ? Kiitoksia jo etukäteen !!!

13.3.2006 00:34
m

nyt saan skriptin lähettämään mailia tiettyyn osoitteeseen, mutta miksi lomakkeeseen kirjoitettu viesti ei välity ? Ja miksi lähettäjänä sähköpostissa näkyy www-data ?? Onko normaalia ? Otsikko kyllä näkyy :)

22.3.2006 19:16
Kurko

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\www\laheta.php on line 15


???

22.3.2006 19:20
Kurko

Tarviiko tässä asentaa joku mailserveri

23.3.2006 11:17
Juha-Pekka Järvenpää <jp@sivut.org>

Virheilmoitus SMTP-palvelimen puuttumisesta tulee kun pyörität skriptiä Windowsissa ja samalla koneella ei ole SMTP-palvelinta. Sellaista on turha asentaa pelkästään PHP:n takia, mutta sinulta on jäänyt PHP konfiguroimatta kunnolla.

Aseta SMTP-palvelimen osoite (saat sen palveluntarjoajaltasi) php.iniin tai jos siihen ei ole pääsyä niin sen voi myös asettaa ini_set():llä.

28.3.2006 18:04
aatu

Miten tämmöiseen tulee s-postin lähetys?
http://ameba.lpt.fi/~imponsan/lahetys.jpg

Lähettäjä saattaa siis valita jomman kumman vaihtoehdoista vastaanottajaksi ja toisen kopioksi tai vain toisen vastaanottajaksi eikä ollenkaan kopiota.

Jokaisessa alasvetovalikossa on siis monta nimeä, jotka kaikki ovat eriä. Kaikilla on oma s-postiosoite, joille automaattinen s-posti saattaa mennä.

29.4.2006 09:16
Jone

Warning: mail(): SMTP server response: 550 5.7.1 Unable to relay for tomiokorhonen@gmail.com in \\192.168.1.16\webfiles\files\2005-10\473473\lahetys.php on line 26

Virheilmoitus voi johtua esim. IIS palvelimen käytöstä eli jos kokeilet omalla työasemalla johon on asennettu IIS palvelin löytyy XP -proffesional käyttiksistä.

IIS ei anna oletuksilla lähetellä posteja paikalliselta koneelta jos ei muultakaan. Sinällään hyvä asetus ettei oma kone toimi spammi postien lähettelijänä jonkun viruksen tms johdosta. ELi oletuksena kannattaa pitää asetukset poissa käytöstä.

IIS on sallittava paikallisen koneen eli osoitteen 127.0.0.1 smtp postia

Eli Käynnistä -> Ohjauspaneeli -> Suorituskyky ja ylläpito - Valvontatyökalut -> IIS Palvelut -> Paikallinen tietokone ->SMTP oletusnäennäispalvelin kuvakkeen ominaisuudet (löytyy hiiren oikenpuleisella painikkeella kuvakkeen päällä) -> Käyttö välilehti -> Välitys nappula > Lisää IP osoite 127.0.0.1 -> peruuttele ok painikkeella takaisin.

PHP koodissa ini asetukset ellei niitä ole php.inissä määritelty

<?php
ini_set("smtp","smtp.suomi.net"); //lähettävä smtp palvelin tarkista yhteyden tarjoajalta esim. on baana
ini_set ("sendmail_from","oma.nimi@loppu.osa"); //lähettäjä kuka lähettää
mail('kelle.lahetet@loppu.osa', 'My Subject', "viesti tähän");
?>

4.5.2006 12:17
Olli

Pystyykö tuohon scriptiin laittamaan kopio ja piilokopio kenttiä?
Kiitos.

24.9.2006 02:40
Trööt <DontTouch@jippii.fi>

Toimii muuten moitteettomasti, mutta sähköposti ei tule perille asti. Mitä tehdä? :S
Eli siis esiin tulee normaali teksti ilman mitään virheilmoituksia, mutta sähköpostissa ei vaan näy mitään O_o

17.11.2006 18:35
Juho <juho.alho@luukku.com>

Venailepa vähän aikaa ja kato huomen uudestaan. Jos ei nyt vielkään oo tullu ni mee vaik www.ohjelmointiputka.net ku sielki on PHP-opas.

31.5.2007 01:26
Tomppa <tom.kontkanen@pp.inet.fi>

Moi !
Olisi ongelma johonka en ole löytänyt vastausta.
Mulla on sivut PHP:llä tehtynä. Minulle lähetetyt kuvat nimetään satunnais generaattorilla ja pienennetään näyttökuvaksi ja orginaali tallennetaan palvelimelle.
Saan sähköpostin kun kuva on tullut.
JA sitten se ongelma. Haluaisin tämän pienennetyn kuvan sähköpostiin mukaan. Eli kuinka sellainen toteutetaan. Palvelimella on siis valmiiksi n.200 pix kuva jota voisi hyödyntää.

Tomppa

13.8.2007 14:09
Mackara

Mietin vaan että mistä saa kirjotettuu sen viestin mitä se lähettää???

24.10.2007 18:24
Aleksi <aleksinkotisivut@hotmail.com>

Ei toimi! Lomakkeen tieto ei lähde minnekkään. Se vaan ilmoittaa että tieto lähti osoitteeseen . Eli siinä ei ede näy osoitetta? Mitä tehdä

21.4.2008 10:12
Sandy

Kiitos hyödyllisestä sivustosta! Lomakkeeni toimii muuten, mutta ääkköset näkyy sähköpostiin lähetetyssä viestissä väärin. Osaisikohan joku auttaa?

Lisää oma kommentti


Juha-Pekka Järvenpää
jp@sivut.org
http://www.jarvenpaa.net/