Avatar billede Frederik Nybegynder
14. juli 2011 - 19:33 Der er 29 kommentarer og
1 løsning

Send mails til mange på én gang.

Hej

Jeg har brug for et script, der kan håndtere at sende mails afsted til mange modtagere.

Hvordan gøres det bedst for at undgå at minimere sendetiden samt undgå at mailen ligner spam?

Modtagerne skal ikke kunne se de andre modtagere, men kun mig som afsender.

Desuden skal der være mulighed for at sende en html-mail for at kunne lave et pænere layout.
har læst mig til, at man skal bruge noget i retning af MIME-Version: 1.0 for at kunne sende html-mails.

Jeg har ikke den store erfaring med php, derfor modtages script forslag meget gerne :) Håber I kan hjælpe!
Avatar billede jakobdo Ekspert
14. juli 2011 - 20:16 #1
Jeg ville klar bruge en mail klasse.
F.eks. findes der:
phpmailer og swiftmailer.
Sidstnævnte har faktisk en funktion som hedder BacthSend, som netop sender samme email til flere brugere, uden alle brugere kan se hvem den ellers er sendt til.
Ligeledes har den support for html og plain-text (kaldet multiparts)
Avatar billede Frederik Nybegynder
14. juli 2011 - 20:45 #2
Kan du evt. guide mig til en opsætning? har læst lidt under "Documentation" Men kan ikke rigtig se hvordan jeg skal integrere det på min side når jeg har uploaded mappen lib til serveren.?
Avatar billede jakobdo Ekspert
14. juli 2011 - 21:16 #3
Avatar billede Frederik Nybegynder
14. juli 2011 - 21:24 #4
Jeps.. Det har jeg prøvet, men jeg får en blank skærm :(

Hvad går galt??

<html>
<head></head>
<body>
<?php


require_once 'lib/swift_required.php';

//Create the Transport
$transport = Swift_SmtpTransport::newInstance('localhost', 25);

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
  ->setFrom(array('fsvarre@gmail.com' => 'Frederik'))
  ->setBody('Here is the message itself')
  ;

//Send the message
$failedRecipients = array();
$numSent = 0;
$to = array('mail1@mail.com', 'mail2@mail.com' => 'Test');

foreach ($to as $address => $name)
{
  $message->setTo(array($address => $name));
  $numSent += $this->send($message, $failedRecipients);
}

printf("Sent %d messages\n", $numSent);



?>
</body>
</html>
Avatar billede jakobdo Ekspert
14. juli 2011 - 21:41 #5
Prøv at ret transport til:

//Create the Transport
$transport = Swift_MailTransport::newInstance();
Avatar billede Frederik Nybegynder
14. juli 2011 - 21:44 #6
Stadig blank skærm..
Avatar billede jakobdo Ekspert
14. juli 2011 - 22:01 #7
Test lige:

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
?>
<html>
<head></head>
<body>
<?php
require_once 'lib/swift_required.php';

//Create the Transport
$transport = Swift_SmtpTransport::newInstance();

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
  ->setFrom(array('fsvarre@gmail.com' => 'Frederik'))
  ->setBody('Here is the message itself');

//Send the message
$failedRecipients = array();
$numSent = 0;
$to = array('mail1@mail.com', 'mail2@mail.com' => 'Test');
foreach ($to as $address => $name){
  $message->setTo(array($address => $name));
  $numSent += $this->send($message, $failedRecipients);
}
printf("Sent %d messages\n", $numSent);
?>
</body>
</html>
Avatar billede Frederik Nybegynder
14. juli 2011 - 22:03 #8
Fatal error: Using $this when not in object context in /home/user/www/index.php on line 28
Avatar billede jakobdo Ekspert
14. juli 2011 - 22:11 #9
Hvilken version af PHP bruger du ?
Avatar billede Frederik Nybegynder
14. juli 2011 - 22:18 #10
PHP Version 5.3.5
Avatar billede jakobdo Ekspert
14. juli 2011 - 22:37 #11
Ret linjen med $this til:

$numSent += $mailer->send($message, $failedRecipients);
Avatar billede Frederik Nybegynder
14. juli 2011 - 22:51 #12
Det brokker den sig godt nok noget over...:

Warning: stream_socket_client(): unable to connect to localhost:25 (Connection refused) in /home/user/www/lib/classes/Swift/Transport/StreamBuffer.php on line 271 Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host localhost [Connection refused #111]' in /home/user/www/lib/classes/Swift/Transport/StreamBuffer.php:273 Stack trace: #0 /home/user/www/lib/classes/Swift/Transport/StreamBuffer.php(66): Swift_Transport_StreamBuffer->_establishSocketConnection() #1 /home/user/www/lib/classes/Swift/Transport/AbstractSmtpTransport.php(116): Swift_Transport_StreamBuffer->initialize(Array) #2 /home/user/www/lib/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start() #3 /home/user/www/index.php(28): Swift_Mailer->send(Object(Swift_Message), Array) #4 {main} thrown in /home/user/www/lib/classes/Swift/Transport/StreamBuffer.php on line 273
Avatar billede jakobdo Ekspert
14. juli 2011 - 22:58 #13
Har du rettet $transport til:

//Create the Transport
$transport = Swift_SmtpTransport::newInstance();
Avatar billede Frederik Nybegynder
15. juli 2011 - 12:01 #14
Nu rettede jeg

//Create the Transport
$transport = Swift_SmtpTransport::newInstance();

til

//Create the Transport
$transport = Swift_MailTransport::newInstance();


og
$numSent += $this->send($message, $failedRecipients);
til
$numSent += $mailer->send($message, $failedRecipients);


Men får meddelelsen:
Sent 0 messages
Avatar billede jakobdo Ekspert
15. juli 2011 - 12:31 #15
Så virker koden jo.
Så skal du bare finde ud af hvordan du udsender emails.
Er det egen server eller ?
Avatar billede Frederik Nybegynder
15. juli 2011 - 12:48 #16
Ja pt er det min egen server, men senere skal jeg have en host.. har overvejet one.com.

Er det nogle specielle indstillinger ved begge tilfælge?
Avatar billede jakobdo Ekspert
15. juli 2011 - 13:17 #17
Du skal konfigurere din server, så den kan sende post.
Er det linux eller windows?
Kig i php.ini og søg efter smtp
Avatar billede Frederik Nybegynder
15. juli 2011 - 13:55 #18
Det er linux - Ubuntu 11.04.
Avatar billede Frederik Nybegynder
15. juli 2011 - 14:01 #19
har smtp localhost.. Den definerede port, skal den være åben i routeren når det er udgående post?
Avatar billede jakobdo Ekspert
15. juli 2011 - 18:12 #20
smtp localhost vil vel ikke virke.
Har du en mailserver kørende localhost?
Ellers skal du opsætte din internet udbyders smtp server.
Avatar billede Frederik Nybegynder
15. juli 2011 - 19:04 #21
har bare apache2 som webserver, tror ikke/ved ikke om den også kører mailserver?

Er det mulig at sætte en op og bruge egen smtp server?


Jeg har stofa som udbyder, men kan ikke rigtig finde nogle oplysninger om smtp fra dem.
Avatar billede jakobdo Ekspert
15. juli 2011 - 21:08 #22
Stofa's smtp skulle hedde: mail1.stofanet.dk
Avatar billede Frederik Nybegynder
15. juli 2011 - 22:21 #23
Men så vidt jeg kan se i scriptet, så ændrede vi jo den hvor det var smtp til $transport = Swift_MailTransport::newInstance(); istedet..?? så hvor skal det ændres?
Avatar billede jakobdo Ekspert
15. juli 2011 - 22:30 #24
Hvis ikke du angiver noget i newInstance();
SÅ bruger den den indbyggede mail() funktion i PHP.
Hvis du angiver smtp, hvor du tidligere havde localhost, så kan du bruge en smtp-server.
Avatar billede Frederik Nybegynder
18. juli 2011 - 08:45 #25
Nu skal jeg lige have det helt på det rene... hvis den bruger mail() funktionen i PHP, er det så ikke nødvendigt med SMPT-oplysninger? Og i så fald, hvorfor bliver der så ikke sendt mails nu?


SMPT-indstillingerne, er det indstillingerne fra min udbyder, eller de lokale på min server?
Avatar billede jakobdo Ekspert
18. juli 2011 - 09:02 #26
Tja...
Hvis du bruger "mail()" funktionen, så skal din php indstillinger klare smtp-opsætningen.
Hvis du angiver en smtp direkte i din php kode / swiftmailer / $transport eller hvad den nu hed, så klare den det.
Men du skal under alle omstændigheder have en fungerende smtp-server.
Ellers kommer du ingen vegne.
Avatar billede Frederik Nybegynder
19. juli 2011 - 17:10 #27
Jeg har nu fået uploaded scriptet hos one.com

har fået at vide, at jeg skal bruge smtp server: mailout.one.com og port 25.

Jeg får dog fejlen Fatal error: Class 'Swift_Transport_EsmtpTransport' not found in /customers/5/5/c/HJEMMESIDENAVN/httpd.www/test/lib/classes/Swift/SmtpTransport.php on line 19


ved koden:

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
?>
<html>
<head></head>
<body>
<?php
require_once 'lib/swift_required.php';

//Create the Transport
$transport = Swift_SmtpTransport::newInstance('mailout.one.com', 25);

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
  ->setFrom(array('mail1' => 'Test1'))
  ->setBody('Here is the message itself')
  ;

//Send the message
$failedRecipients = array();
$numSent = 0;
$to = array('mail2', 'mail3' => 'A name');

foreach ($to as $address => $name)
{
  $message->setTo(array($address => $name));
  $numSent += $this->send($message, $failedRecipients);
}

printf("Sent %d messages\n", $numSent);
?>
</body>
</html>



Er det noget du kan hjælpe med?
Avatar billede Frederik Nybegynder
20. juli 2011 - 17:59 #28
jakobdo smid et svar, har fået det til at virke :)
Avatar billede jakobdo Ekspert
24. juli 2011 - 16:35 #29
Svar!

Du kunne vel bare bruge en tom newInstance() ?
Avatar billede Frederik Nybegynder
29. juli 2011 - 19:05 #30
Tror der har været en fejl ved upload til serveren, for da jeg uploadede samme kode virkede det bare :)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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