PHP odosielanie multi emailov z SQL DB | PHPMailer – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

PHP odosielanie multi emailov z SQL DB | PHPMailer – PHP – Fórum – Programujte.comPHP odosielanie multi emailov z SQL DB | PHPMailer – PHP – Fórum – Programujte.com

 

p43ck0
Duch
10. 3. 2020   #1
-
0
-

Ahojte, mám taký problém, mám databázu, kde mám veľa emailov. Každému z nich by som chcel poslať rovnakú správu - naraz. Skúšal som to riešiť cez SMTP údaje mail klienta a napojenie na Databázu použitím PHPMailer, ale bez úspechu. Vedel by sa na to niekto prosím pozrieť a povedať, čo tam je zle? Prikladám kód + SQL databázu (bez emailov, doplň hocijaké len na skúšku..)

source

https://uloz.to/file/Y9J4mMEYpTsi/multiple-emails-zip

Nahlásit jako SPAM
IP: 85.248.44.–
peter
~ Anonymní uživatel
3619 příspěvků
10. 3. 2020   #2
-
0
-

A mas spravne nastaveny server? Servery obvykle spamy hazou do spam kose, pokud to admini nenastavi jinak. Projde treba prvnich 5 mailu a dalsich 1000 nee.

Nenapsal jsi, jak se ten tvuj program chova. Co se stane? Co vypise? Ten mail z db tam je? zkousel jsi tu adresu pres echo vypsat?

Mohl jsi do fora dat aspon tento kod, ten vypada jako ten hlavni, pokud je ten mailer ok.

<?php

//show errors
error_reporting(E_ALL);
ini_set('display_errors', 1);

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

$conn=mysqli_connect("localhost","root","","mailer");

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

$conn=mysqli_connect("localhost","root","","mailer");

//Setup
$mail=new PHPMailer();
$mail->isSMTP();                                            // Send using SMTP
$mail->Host       = 'smtp.gmail.com';                    // Set the SMTP server to send through
$mail->SMTPAuth   = true;                                   // Enable SMTP authentication
$mail->Username   = '#';                     // SMTP username
$mail->Password   = '#';                               // SMTP password
$mail->SMTPSecure = 'tls';         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
$mail->Port       = 587;
//Mail adding
$mail->setFrom("#");//FROM
//Query to get data from database.
$sql="select * from users where send_email=1";
$res=mysqli_query($conn,$sql);
if(mysqli_num_rows($res)>0)
{
    $mail->addReplyTo("#");
    while($x=mysqli_fetch_assoc($res))
    {
        $mail->addBCC($x['email']);
    }
    // Content
    $mail->isHTML(true);  // Set email format to HTML
//Added your custom subject
    $mail->Subject = 'This is file sending mail';
//Added your custom body
    $mail->Body    = '<h1>Hope, you have recieved email</h1>';
    $mail->AltBody = 'This is for non-html content';
    if($mail->send())
    {
        echo "Success";
    }
    else
        echo "Failure";
}
else
{
    echo "No data found";
}
?>
Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
peter
~ Anonymní uživatel
3619 příspěvků
10. 3. 2020   #3
-
0
-

jo, a zkus si zapnout error_reporting a i na serveru vypisovani chyb. Je dobre si precis php chybu, kdyz to nedela, co ma.
Na localhost, na tvem pc, nemusis mit v php povoleny mail. Php se ti snazi vypsat chybu, ale ty mas potlacene chybove hlasky v nastaveni php, treba.

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
p43ck0
Duch
10. 3. 2020   #4
-
0
-

Ahoj, vďaka za odpoveď. 

Server je správne nastavený, script má fungovať tak, že po otvorení index.php sa automaticky pošle jedna správa pre všetky emaily z db a vypíše sa hláška Success, miesto toho mi však vypíše No data found. Pravdaže, aj dáta v DB mám riadne doplnené, som si ale istý, že DB aj SMTP údaje su správne, čiže chyba bude jedine v mojom kóde..

Nahlásit jako SPAM
IP: 85.248.44.–
peter
~ Anonymní uživatel
3619 příspěvků
11. 3. 2020   #5
-
0
-

1. Zapni si error_reporting a pridej si tam ten prikaz do kodu, google = php error_reporting 
2. Pridej si tam vypis mysqli chyb, google = php mysqli error
Pak ti zacne php a sql vypisovat chyby. To, co mas v kodu, to neni vypis chyb, to je pouze vypis vysledku funkci (return). Ty ti vypisi obvykle jen false nebo true/data.
3. "vypíše No data found"
No, ale, to je chybova hlaska tveho kodu. To snad dokaze najit i male dite...
echo "No data found";
Proc to pise tu hlasku? Protoze if funkce vratila false.
Ktery if vratil false? if(mysqli_num_rows($res)>0)
A proc vratil if false? Protoze nebyla splnena podminka mysqli_num_rows($res)>0
A proc nebyla splnena podminka? Protoze SQL prikaz vratil 0 radku, sql dotazu nevyhovuje zadny radek v tabulce. Nebo je sql prikaz spatny.
a) Co s tim? Pustis si dbadmin, phpmyadmin, na serveru, otevres tam databazi, tabulku, kliknez na zalozku sql a vlozis tam kod tveho prikazu a kliknes Odeslat nebo, Proved nebo, co tam je za formularove tlacitko pro vykonani sql prikazu
select * from users where send_email=1
A bud to vrati tabulku s radny nebo napise 0 radku odpovida sql prikazu.
b) Pak mozna selhal radek
$res=mysqli_query($conn,$sql);
Viz a), otestujes sql prikaz. V tomto pripade ti to vrati bud a) nebo vypise sql chybu v prikazu. Treba chybna syntaxe na radku 1 blizko kodu "...". V druhem pripade spravis sql prikaz, v prvnim je sql prikaz dobre, chyba je tedy nekde drive, asi selhalo sql pripojeni.
$res=mysqli_query($conn,$sql); // var_dump($conn);
... tim padem zadna dalsi sql funkce pozdeji nemuze fungovat, kdyz se nepripoji k databazi.
$conn=mysqli_connect("localhost","root","","mailer");
... prikaz vypada v poradku, ale mozna nemas zapnuty sql server? To se da testnout treba i tim phpmyadminem, jestli se doklikas do databaze, tabulek, pak se phpmyadmin pripojil.

No, ale, kdyby jsi tam mel 1. a 2., tak ti to php vetsinou vypise. ale samozrejme tam muzes misto toho pridat var_dumpy.
var_dump($sql); // zkontrolujes si sql prikaz
var_dump($con); // zkontrolujes, zda je $con null nebo to vypise neco jineho
var_dump($res); // zkontrolujes, zda je $res null nebo obvykle vypise resource
Pokud je resource, pak sql prikaz sql server prijal jako spravny a pravdepoddobne vratil 0 radku. Cili, sql prikaz je spatne napsany, ale neobsahuje chybu, kvuli ktere by to server nedokazal prepsat na program vyhledavajici data z databaze.
 

if(mysqli_num_rows($res)>0)
{
    $mail->addReplyTo("#");
    while($x=mysqli_fetch_assoc($res))
    {
        $mail->addBCC($x['email']);
    }

    if($mail->send())
    {
        echo "Success";
    }
    else
        echo "Failure";
}
else
{
    echo "No data found";
}
?>

4. tip
Sql prikaz se jmenuje $query ne $sql.

Fetchem ziskavas data, radek, $row ne $x.

google = php mysqli error

 <?php
$mysqli = new mysqli("localhost","my_user","my_password","my_db");

if ($mysqli -> connect_errno) {
  echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
  exit();
}

// Perform a query, check for error
if (!$mysqli -> query("INSERT INTO Persons (FirstName) VALUES ('Glenn')")) {
  echo("Error description: " . $mysqli -> error);
}

$mysqli -> close();
?> 

google = php error_reporting (pred vsemi include, require, na zacatku kodu)

 <?php
// Turn off error reporting
error_reporting(0);

// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Report all errors
error_reporting(E_ALL);

// Same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
?> 

No, a zkus opravit jeste v kodu vypisy echo, texty chyb a oznameni tak, aby vypisovali takovy problem, jakemu odpovida podminka.
  

echo "No data found"; // (mysqli_num_rows($res)>0) a protoze 
// nekontrolujes, zda je res null, tak soucasne do te 
// podminky zahrnujes i $res=mysqli_query($conn,$sql);
echo "sql: Nalezeno 0 radku nebo je res null"; // nejak vic uzivatelsky privetivejsi text, No data found nevystihuje druh selhani, spis je tak pro proste uzivatele

echo "Success"; // $mail->send())
echo "funkce PHPMailer vratila true, mail byl poslan uspene mail serveru"; // a mail server ho jeste nemusi odeslat, kdyz je to true

echo "Failure";
Odeslani mailu selhalo. class PHPMailer / mail() false, protoze v mailu jsou chyby nebo se nepodarilo kontaktovat mail server


Vis, ono, zkopirovat neco z internetu, copy, paste, jeste neznamena, ze kodu rozumis, kdyz nejsi ochotny nahlednout ani do dokumentace php.net, co ktera funkce dela a v jakem pripade selhava.

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
peter
~ Anonymní uživatel
3619 příspěvků
11. 3. 2020   #6
-
0
-

4b. tip
Mozna mas v databazi jinak pojmenovanou tabulku nebo sloupec. Ale to by ti mel vypis chyb napsat
$mysqli -> error

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Podobná vlákna

Odosielanie mailov v php — založil ebeš

PHPMailer - chybové hlášky — založil pr0gr4mm3r

Odosielane Emailov z obrázkom — založil Michal93

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý