Avatar billede Asger Carlsen Nybegynder
23. oktober 2013 - 20:21 Der er 22 kommentarer og
1 løsning

Gode råd til mail() funktion med flere modtagere

Jeg er ved at lave mig en lille nyhedsbrev på min hjemmeside. Har lavet tilmeldningsdelen, og mangler lidt råd til afsendelsen. Har lavet det med mail()-funktionen, og er lidt usikker på om det er fornuftigt at gøre det på den måde.

Tænker på om der er noget "forkert" i at gøre det på den måde. Jeg er nysgerrig om jeg kan få problemer med at ikke alle modtagere får mailen, hvis der kommer mange modtagere, og hvorvidt det er ressourcekrævende at gøre det på den måde?

Koden er som følger:

    // Vairable
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
    $headers .= 'Bcc: modtager1@domæne.dk,modtager2@domæne.dk,modtager3@domæne.dk,osv' . "\r\n";
    $headers .= "from:mail@domæne.dk";
   
    $besked = "beskeden.....";

    // Mail sendes   
    mail('', "Nyhedsbrev", $besked, $headers);



Alle input's er velkomne.
Avatar billede Hardball21 Nybegynder
23. oktober 2013 - 20:47 #1
Jeg lavede noget lignende for en del år siden, men gik hurtigt væk fra det da det skabte en del problemer - som jeg lykkeligt har glemt hvad var.

Du får et bedre resultat ved at loope dig gennem dine modtagere og sende dem individuelt -- så kan du jo også indivisualisere dine mails
Avatar billede Asky Forsker
23. oktober 2013 - 20:52 #2
Det kommer an på flere ting. For det første, om dit webhotel vil acceptere mange modtagere af den samme mail. Jeg har selv haft problemet med TDCwebmore, hvor jeg var nødt til at omprogrammere fra begyndelsen og inkludere flere hjælpefiler: class.phpmailer.php og class.smtp.php.
For det andet hvor i programmeringen du placerer selve nyhedsbrevet. Fx som $Nyhedsbrev?
Avatar billede Asger Carlsen Nybegynder
23. oktober 2013 - 21:53 #3
#1: Havde jeg også overvejet. Læste i php-manualen (http://php.net/manual/en/function.mail.php) at det ikke var så smart da er ret så ressourcekrævende. Så anbefaler de PEAR (hvilket jeg syntes så lidt omstændigt ud). Hvor mange sendte du mails til med loop? Sådan i runde tal...

#2: Jeg har den hostet hos ONE, så har ikke selv indflydelse på serveropsætning. Selvenyhedsbrevet ligger $besked. Det er en længere HTML-kode, den er bare ikke medtaget her.
Avatar billede Asky Forsker
24. oktober 2013 - 09:53 #4
Mit projekt gik ud på at sende en mail fra en formular dels til en indtastet e-mail og dels til en fast e-mail nemlig firmaet. Det er derfor lidt anderledes i problemstillingen. Hos TDC røg den ene mail i spamfiltret, men hos webhosting gik begge glat igennem.
Hvis jeg skulle lave afsendelsesdelen vil jeg derfor foretrække at bruge class.phpmailer.php og class.smtp.php. PEAR har jeg vist kigget på, men kan ikke huske, hvorfor jeg opgav det. til mit brug virker hjælpefilerne ikke ressourcekrævende, det virker på brøkdele af et sekund.
Avatar billede Asger Carlsen Nybegynder
24. oktober 2013 - 10:17 #5
class.phpmailer.php og class.smtp.php

Er det en indbygget del i php, eller hvor kan jeg finde det?
Avatar billede Hardball21 Nybegynder
24. oktober 2013 - 10:40 #6
Avatar billede Asky Forsker
24. oktober 2013 - 13:43 #7
Eller her:
http://code.google.com/a/apache-extras.org/p/phpmailer/

programmerne skal ligge i samme mappe som din kodeside. du kalder programmerne fra din kodeside:

require_once('class.phpmailer.php');
include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail            = new PHPMailer();
osv (koden fortsætter)

koden i phpmaileren kan rettes lidt til efter individuelle behov.
Avatar billede Asger Carlsen Nybegynder
24. oktober 2013 - 19:03 #8
Det må jeg lige få kigget på engang. Hvor meget opsætning er der til at få det integreret? Tænker om det "bare" er at skrive info på mail og smtp, og så kører det, eller om der 5-6 ting der skal spille sammen før det virker?
Avatar billede Hardball21 Nybegynder
24. oktober 2013 - 20:06 #9
Kun kan hardcode din opsætning ind i "class.phpmailer.php"

Derefter kan koden se sådan ud (har slettet en del men bibeholdt det vigtigste):



    require_once('Classes/PHPMailer_5.2.4/class.phpmailer.php');


    $mail = new PHPMailer(true);
    $mail->IsSendmail();

    try {
      $mail->AddAddress('peter@acme.dk', 'Peter Kanin');
      $mail->SetFrom('post@acme.dk', 'Acme Postudsender');
      $mail->AddReplyTo('post@acme.dk', 'Acme Postudsender');
      $mail->Subject = "Test E-Mail";
      $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
      $mail->MsgHTML($html);
      $mail->AddAttachment('pdf/betingelser.pdf');
      $mail->Send();
      echo "Message Sent OK</p>\n";
    } catch (phpmailerException $e) {
      echo $e->errorMessage();
    } catch (Exception $e) {
      echo $e->getMessage();
    }
Avatar billede Asky Forsker
24. oktober 2013 - 21:56 #10
Hvis man også inkluderer smtp, mener jeg der er visse fordele.
Der dog inkluderes login og brugernavn fra afsenderen.


require_once('class.phpmailer.php');
include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail            = new PHPMailer();
//$body            = $mail->getFile('contentsbp.php');
//$body            = eregi_replace("[\]",'',$body);
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host      = "qmail.tdcwebmore.dk"; // SMTP server
$mail->SMTPDebug  = 2;                    // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth  = true;                  // enable SMTP authentication
$mail->Host      = "qmail.tdcwebmore.dk"; // sets the SMTP server
$mail->Port      = 587;                    // set the SMTP port for the GMAIL server
$mail->Username  = "info@domæne.dk"; // SMTP account username
$mail->Password  = "password";        // SMTP account password
$mail->From    = "info@domæne.dk";
$mail->FromName = "Afsender";
$mail->AddReplyTo("domæne@domæne.dk","Afsendernavn");
//$mail->AddCC($email, "kunde");
$address = "$email";
$mail->AddAddress($address, "modtager");
$mail->AddBCC("info@domæne.dk", "Afsender");
$mail->Subject = ($_POST['subject']);

$mail->IsHTML(true);
$mail->MsgHTML($body);
$address = ($_POST['email']);
//$mail->AddAddress($address, "modtager");
//$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;

} else {

    echo " <h2>Formularen er blevet sendt med disse oplysninger:  ".$email."</br>  Emne: ".$emne." </h2>";
 
}
}
}


Den sidste besked på skærmen kan naturligvis undlades. Men den er udmærket, når man sender fra en formular, fordi den med det samme fortæller, at alt er gået som det skulle.
Avatar billede Asger Carlsen Nybegynder
26. oktober 2013 - 16:53 #11
Kan ikke rigtigt få gang i det...

Skal jeg ændret noget i filerne "class.phpmailer.php eller class.smtp.php"?


Har indsat koden fra #10 og #9, men når jeg loader 'class.phpmailer.php', sidder jeg fast.
Avatar billede Asger Carlsen Nybegynder
26. oktober 2013 - 17:08 #12
Nu fik jeg loadet filerne, men når den starter en mail op, vil den ikke videre:

kommer til linien: $mail = new PHPMailer();

her går den i stå.
Avatar billede Asger Carlsen Nybegynder
26. oktober 2013 - 17:33 #13
Succes, fik endeligt loaded siderne koden korrekt. Nu er den så bare gal med login'et :(

Får fejlen:
2013-10-26 15:31:20    SMTP ERROR: Failed to connect to server: Connection timed out (110) SMTP connect() failed. Mailer Error: SMTP connect() failed.

Har hostet min side hos one.com, nogen der kan hjælpe mig med deres opsætning?

Har forsøgt følgende:

    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->Host = "send.one.com"; // SMTP server
    $mail->SMTPDebug = 2; // enables SMTP debug information (for testing)
    // 1 = errors and messages
    // 2 = messages only
    $mail->SMTPAuth = true; // enable SMTP authentication
    $mail->Host = "send.one.com"; // sets the SMTP server
    $mail->Port = "465"; // set the SMTP port for the GMAIL server
    $mail->Username = "mail@domæne.dk"; // SMTP account username
    $mail->Password = "kode-til-mail"; // SMTP account password
    $mail->From = "mail@domæne.dk";
Avatar billede Asky Forsker
26. oktober 2013 - 18:47 #14
Har du tjekket om portnummeret er rigtigt?
Avatar billede Asger Carlsen Nybegynder
26. oktober 2013 - 18:52 #15
ja, den skulle være god nok ifølge one.com's hjemmeside. Så er det bare den med at de bruger SSL-godkendelse. Det ved jeg ikke om er nødvendigt at sætte op.

men der skal ikke laves nogle indstillinger i "class.phpmailer.php eller class.smtp.php" for at det burde virke?
Avatar billede Asky Forsker
27. oktober 2013 - 09:31 #16
Så vidt jeg kan se af fejlmeddelelsen, kan den ikke finde smtp serveren, så det må være der, fejlen skal findes.
Avatar billede Asky Forsker
27. oktober 2013 - 13:57 #17
I Outlook er porten til SMTP normalt port 25. Det er da værd at prøve.
Avatar billede Asger Carlsen Nybegynder
27. oktober 2013 - 16:06 #18
Det lykkedes til sidst. Tog fat i min udbyder. De havde åbenbart en anden SMTP når det var fra php sider. Smid et svar så får du point, og mange tak for hjælpen :)
Avatar billede Asky Forsker
27. oktober 2013 - 20:41 #19
Det var så lidt :-) Hvad var porten?
Avatar billede Asger Carlsen Nybegynder
27. oktober 2013 - 22:03 #20
Porten var 25, og så hed smtp-serveren: mailout.one.com
Avatar billede Asky Forsker
28. oktober 2013 - 09:16 #21
Rart at vide, hvis vi skal hjælpe andre ;-) Jeg har selv haft uvurderlig hjælp her i konferencen. Du har ikke givet point endnu.
Avatar billede Asger Carlsen Nybegynder
28. oktober 2013 - 13:24 #22
Du skal lige læge et svar.
Avatar billede Asky Forsker
28. oktober 2013 - 15:03 #23
Det får du så her.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester