Avatar billede cot Nybegynder
06. december 2009 - 20:05 Der er 8 kommentarer og
1 løsning

Php mail() ender i Uønsket post

Hej alle!

Jeg har et lille problem med min mail funktion i PHP. Jeg vil gerne sende en aktiveringsmail rundt til de som registrerer sig som bruger på min side. Mailen bliver sendt, men problemet er at den ender i uønsket post / junk / trash mappen.

Jeg har fået at vide at det handler om mine headers, jeg har siddet og søgt lidt på exp.dk og google, og prøvet med forskellige headers, men det vil ikke virke.

Koden ser således ud:
<?

....


$to  = $email;

// subject
$subject = 'Registered on farming tool!';

// message
$message = 'Hey '.$brugernavn.'! <br/><br/>
Thanks for registering on farming tool!<br/>
Before you can login, you have to click the link below to activate you user:<br/>
<a href="http://www.teet.dk/farming/act.php?code='.$act_kode.'">http://www.teet.dk/farming/act.php?code='.$act_kode.'</a><br/><br/>
This is your login information:<br/>
User: '.$brugernavn.'<br/>
Pass: '.$password.'
<br/><br/>
Kind regards<br/>
Teet.dk - Jens(admin)';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

// Additional headers
$headers .= 'To: '.$brugernavn.' <'.$to.'>' . "\r\n";
$headers .= 'From: Teet.dk - Farming <minmail@hotmail.com>' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);

.....

?>
Avatar billede wtd_nielsen Nybegynder
06. december 2009 - 20:15 #1
jeg har også haft en del problemer med mail funktionen, og bruger derfor Swiftmailer i stedet for phps egen mail funktion:
http://swiftmailer.org/
med swiftmailer har jeg ikke oplevet af mails blev opfattet som spam.

ellers prøv med:
$headers  = "MIME-Version: 1.0"."\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
$headers .= "From: $from_name<$from_email>\n";
$headers .= "Reply-To: $from_email" . "\n" .
"Return-Path: $from_email\n".
"X-Mailer: PHP/" . phpversion();

jeg har fjernet alle \r  fordi de var skyld i at jeg fik mails tilbage, hvor der stod at der var fejl i min header
Avatar billede cot Nybegynder
06. december 2009 - 20:29 #2
Det virker ikke for hotmail, men i Gmail vil den godt smide den ind i indbakken.  Hotmail siger at det er en ukendt afsender. :S

Jeg vil lige prøve at kigge på swiftmailer så :)
Avatar billede cot Nybegynder
06. december 2009 - 21:29 #3
Jeg synes Swiftmailer virker utrolig svært at finde rundt i. Jeg ved ikke om det bare er mig, men synes da at det burde være rimelig simepelt at sende en mail med det library...

Men ikke for mig, nogen der gider hjælpe mig lidt på vej til at bruge det? :)
Avatar billede wtd_nielsen Nybegynder
07. december 2009 - 08:30 #4
her er et uddrag af min kode, som er placeret i en Email klasse:

require_once("swiftmailer/lib/swift_required.php");

private $mailer;

    public function __construct()
    {
        Swift_Preferences::getInstance()->setCharset('iso-8859-1');
        $transport = Swift_SmtpTransport::newInstance('localhost');
        $this->mailer = Swift_Mailer::newInstance($transport);
    }

private function sendEmail($subject, $from_navn, $from_email, $to, $body)
    {
        //Create the message
        $message = Swift_Message::newInstance()

        //Give the message a subject
        ->setSubject($subject)

        //Set the From address
        ->setFrom(array($from_email => "Studievalg - ".$from_navn))

        //Set the To address
        ->setTo($to)

        //Give it a body
        ->setBody($body, "text/plain")

        ;
       
        //Send the message
        $result = $this->mailer->send($message);
        return $result;
    }
Avatar billede wtd_nielsen Nybegynder
07. december 2009 - 08:32 #5
->setFrom(array($from_email => "Studievalg - ".$from_navn))

Studievalg skal så lige fjernes....
Avatar billede cot Nybegynder
07. december 2009 - 20:41 #6
hvis jeg prøver at implementere ovenstående i min fil (Jeg har self. ændret diverse variabler), får jeg følgende melding:
Parse error: syntax error, unexpected T_PRIVATE in /var/www/teet.dk/public_html/farming/reg.php on line 83

Den kan vist ikke så godt lide den private der, men hvorfor, det forstår jeg ikke :S

Koden ser nu således ud:

<?php

......

$to  = $email;

// subject
$subject = 'Registered on farming tool!';

// message
$body = 'Hey '.$brugernavn.'! <br/><br/>
Thanks for registering on farming tool!<br/>
Before you can login, you have to click the link below to activate you user:<br/>
<a href="http://www.teet.dk/farming/act.php?code='.$act_kode.'">http://www.teet.dk/farming/act.php?code='.$act_kode.'</a><br/><br/>
This is your login information:<br/>
User: '.$brugernavn.'<br/>
Pass: '.$password.'
<br/><br/>
Kind regards<br/>
Teet.dk - Jens(admin)';

require_once("swiftmailer/lib/swift_required.php");

$from_navn = 'Teet.dk';
$from_email = 'info@teet.dk';

private $mailer;

    public function __construct()
    {
        Swift_Preferences::getInstance()->setCharset('utf-8');
        $transport = Swift_SmtpTransport::newInstance('asmtp.unoeuro.com');
        $this->mailer = Swift_Mailer::newInstance($transport);
    }

private function sendEmail($subject, $from_navn, $from_email, $to, $body)
    {
        //Create the message
        $message = Swift_Message::newInstance()

        //Give the message a subject
        ->setSubject($subject)

        //Set the From address
        ->setFrom(array($from_email => "Teet: Farmingtool - ".$from_navn))

        //Set the To address
        ->setTo($to)

        //Give it a body
        ->setBody($body, "text/html")

        ;
       
        //Send the message
        $result = $this->mailer->send($message);
        return $result;
    }

....

?>
Avatar billede wtd_nielsen Nybegynder
07. december 2009 - 21:54 #7
det er fordi du(jeg) har angivet $mailer som private. Det anvendes i objekt orienteret programmering, prøv at find en tutorial om PHP og objekt orienteret programmering.
Lav en php-fil og kald filen Email.php, indsæt denne kode:

require_once("swiftmailer/lib/swift_required.php");
class Email
{
    private $mailer;
    private static $instance = null;

    private function __construct()
    {
        Swift_Preferences::getInstance()->setCharset('iso-8859-1');
        $transport = Swift_SmtpTransport::newInstance('localhost');
        $this->mailer = Swift_Mailer::newInstance($transport);

    }
    /**
    * singleton-pattern
    */
    public static function getInstance()
    {
        if(self::$instance==null)
            self::$instance = new Email();
        return self::$instance;
    }

    public function sendEmail($subject, $from_navn, $from_email, $to, $body)
    {
        //Create the message
        $message = Swift_Message::newInstance()

        //Give the message a subject
        ->setSubject($subject)

        //Set the From address
        ->setFrom(array($from_email => $from_navn))

        //Set the To address
        ->setTo($to)

        //Give it a body
        ->setBody($body, "text/plain")

        ;
       
        //Send the message
        $result = $this->mailer->send($message);
        return $result;
    }
}

Når du så vil sende en mail fra en af dine andre PHP filer skriver du:

require_once("Email.php");
$mail = Email::getInstance();
$mail->sendEmail($subject, $from_navn, $from_email, $to, $body);
Avatar billede cot Nybegynder
07. december 2009 - 22:22 #8
Hej tak for svaret, det ser lidt bedre ud. Har faktisk ikke rigtig arbejdet så meget med OOP før i php...

Med den ovenstående kode virker det stadig ikke desværre :(

Følgende fejl:
Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/var/www/teet.dk/:/var/www/tmp/) in /var/www/teet.dk/public_html/farming/swiftmailer/lib/preferences.php on line 15
We have send an activation mail to the E-mail: jenser12@hotmail.com

Fra linje 15 i preferences.php ser således ud:

if (function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()))
{
  Swift_Preferences::getInstance()
    -> setTempDir(sys_get_temp_dir())
    -> setCacheType('disk');
}
Avatar billede cot Nybegynder
08. december 2009 - 17:13 #9
Jeg har nu fundet ud af, hvad mit problem egentlig var! :)
Det er fordi jeg sender linket i min mail. Når jeg sender mailen uden et link, så sender den mailen til indbakken uden problemer.

Hvordan undgår jeg så, at dette sker? :)

mvh.
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