Avatar billede shaya Praktikant
28. oktober 2010 - 09:38 Der er 19 kommentarer og
1 løsning

Sende email med en vedhæftet fil i Php?

Hvordan kan man sende en email med en vedhæftet fil via webserver php?

Tusind tak
Avatar billede Slater Ekspert
28. oktober 2010 - 11:13 #1
Tag et kig på PHPMailer:
http://phpmailer.worxware.com

- Den er meget bedre til mailudsending end PHPs indbyggede funktion alligevel. Og der kan du netop lave vedhæftninger ret nemt, f.eks. bare:
$mail->AddAttachment($path);

http://phpmailer.worxware.com/index.php?pg=tutorial#3
Avatar billede mcb2001 Nybegynder
28. oktober 2010 - 11:25 #2
Avatar billede shaya Praktikant
28. oktober 2010 - 17:10 #3
mcb2001: Kan ikke rigtig få det til at virke?
Avatar billede shaya Praktikant
29. oktober 2010 - 00:29 #4
Vil gerne sende en exe fil og en mac os exe fil og en Linux exe fil? Når jeg kører php filen kommer siden ikke frem?
Avatar billede Slater Ekspert
29. oktober 2010 - 09:19 #5
Det er også en unødvendigt kompliceret løsning, i forhold til at bruge PHPMailer.
Avatar billede shaya Praktikant
29. oktober 2010 - 17:37 #6
Det jo ikke alle tre filer på EN gang. Og hvorfor er det unødvendigt? Har du råd?
Avatar billede Slater Ekspert
30. oktober 2010 - 12:27 #7
Det er unødvendigt, fordi den løsning indebærer at skrive en masse kode selv, vælge headers, læse binær data, osv. - og der er mange ting der kan gå galt, hvis du ikke får det rettet ordentligt til dit formål.

Alternativet, som jeg skrev i første indlæg, er bare at inkludere et library til formålet, f.eks. PHPMailer, og så ellers smide standardkoden ind, sammen med: $mail->AddAttachment($filnavn); Så er du færdig, og behøver ikke teste for fejl, etc.

Jeg har også ladet mig fortælle at PHPs interne mail()-funktion kommunikerer dårligt med SMTP-servere, og derfor sender langsommere end PHPMailer kan. Jeg har dog ikke gidet teste selv.
Avatar billede shaya Praktikant
31. oktober 2010 - 11:15 #8
Når ok. Jeg er inde på WorxWares hjemmeside. Men har lige et spørgsmål - min hjemmeside ligger ikke på min server, den ligger nemlig på one.com's server. Er det muligt at installerer PHPmailer der?
Avatar billede shaya Praktikant
31. oktober 2010 - 12:11 #9
Jeg har fundet ud af hvordan man installerer, men kan ikke rigtig få det til at virke? Det er noget med at man skal installerer noget spaw eller sådan noget?
Avatar billede Slater Ekspert
31. oktober 2010 - 14:39 #10
Spaw er en tekst-editor. Den skulle ikke særlig gerne have noget med det at gøre. PHPMailer skal heller ikke installeres - det er ikke et program men et library - bare tre PHP-filer, der skal lægges et sted og så inkluderes i dine filer.

Jeg ved godt du siger du har fundet det, men for en sikkerheds skyld smider jeg lige et link til downloaden:
http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/PHPMailer%20v5.1/PHPMailer_v5.1.zip/download

I den .zip ligger en del filer, men du skal kun bruge tre: class.phpmailer.php, class.pop3.php og class.smtp.php.
Læg disse tre filer samme sted på serveren, f.eks. en undermappe der hedder phpmailer.

Så skriver du i din kode:
[code]
require ('phpmailer/class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPKeepAlive = true;
$mail->IsHTML(true);

$mail->SetFrom('no-reply@dinside.dk', 'Din sides navn');
$mail->Subject = "E-mailens titel";
$mail->MsgHTML("E-mailens indhold");

$mail->AddAddress("modtager@example.com");
$mailer->AddAttachment("sti/til/attachment.exe");

$mail->Send();
[/code]
Avatar billede Slater Ekspert
31. oktober 2010 - 14:40 #11
Ups, det var vist det forkerte tag at bruge. Det ligner jo lort. Jeg prøver igen:


require ('phpmailer/class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPKeepAlive = true;
$mail->IsHTML(true);

$mail->SetFrom('no-reply@dinside.dk', 'Din sides navn');
$mail->Subject = "E-mailens titel";
$mail->MsgHTML("E-mailens indhold");

$mail->AddAddress("modtager@example.com");
$mailer->AddAttachment("sti/til/attachment.exe");

$mail->Send();
Avatar billede shaya Praktikant
31. oktober 2010 - 15:40 #12
Kan ikke rigtig få dit eksempel til at virke?

Har prøvet med den her fra Worxware's hjemmeside og det virker heller ikke?
<code>
<html>
<body>
<?php

require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();  // telling the class to use SMTP
$mail->Host    = "send.one.com"; // SMTP server

$mail->From    = "ex@domain.com";
$mail->AddAddress("ex@domain.com");

$mail->Subject  = "First Message";
$mail->Body    = "Hi! \n\n This is my first e-mail.";
$mail->WordWrap = 50;
$mail->AddAttachment('attachment.ico');
if(!$mail->Send()) {
  echo 'Message was not sent.';
  echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
  echo 'Message has been sent.';
}
?>
</body>
</html>
</code>
Hvad er fejlen her? Dette er en hel .php fil?
Avatar billede shaya Praktikant
31. oktober 2010 - 15:41 #13
Ups, troede man kunne skrive <code></code> i eksperten. Kan man åbenbart ikke, så tag <code></code> fra koden.
Avatar billede shaya Praktikant
31. oktober 2010 - 15:42 #14
smtp serveren (send.one.com) er one's sende server som de opgav til mig.
Avatar billede shaya Praktikant
01. november 2010 - 14:10 #15
Glem det. Fandt ud af det. send svar viperine
Avatar billede Slater Ekspert
01. november 2010 - 14:25 #16
Virker det?

Jeg var ellers lige ved at teste på http://komplettgamerchallenge.com som også ligger på one.com, men hvis du selv har løst det, så er det jo kun godt.
Avatar billede shaya Praktikant
01. november 2010 - 16:35 #17
Ja her er hvad jeg kom frem til (direkte taget fra PHPmailer eksempler):
require_once '../class.phpmailer.php';

$mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch

try {
  $mail->AddReplyTo('name@yourdomain.com', 'First Last');
  $mail->AddAddress('whoto@otherdomain.com', 'John Doe');
  $mail->SetFrom('name@yourdomain.com', 'First Last');
  $mail->AddReplyTo('name@yourdomain.com', 'First Last');
  $mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
  $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
  $mail->MsgHTML(file_get_contents('contents.html'));
  $mail->AddAttachment('images/phpmailer.gif');      // attachment
  $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
  $mail->Send();
  echo "Message Sent OK\n";
} catch (phpmailerException $e) {
  echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage(); //Boring error messages from anything else!
}
07. oktober 2016 - 11:59 #18
Hej Shaya og Slater

Er det mig tilladt at blande mig i dette (gamle) indlæg?
Jeg har fået at vide at phpmailer er det rigtige at bruge når der skal vedhæftes en fil.
Jeg har kopieret standardkoden og skiftet parametrene ud med mine egne.
Jeg får en mail hver gang, men uden den vedhæftede fil.
Jeg tror at filnavn og sti ikke passer, men det kan også være andet.
Jeg har endda forsøgt at skrive:
    $email->addAttachment( "C:/AUTOEXEC.BAT" );
Men jeg får stadig en mail uden vedhæftning.
Avatar billede Slater Ekspert
07. oktober 2016 - 12:38 #19
Prøv:
- Læg filen i samme mappe eller en undermappe til PHP-filen og brug en relativ sti i stedet. Absolutte stier, især til rodmapper, kan blive blokeret af sikkerhedsmæssige årsager.
- Brug en anden filtype. Bat-filer bliver frasorteret af mange virusscannere og lignende, da den kan indeholde farlig kode. Prøv med et billede eller lignende til at starte med for at teste det.
07. oktober 2016 - 15:30 #20
Hej Slater

Tak for dit svar, det bekræfter lidt min mistanke med placeringen.

Jeg bruger følgende html kode:
          <span action="upload.php" method="post" enctype="multipart/form-data">
                <label for="fileToUpload">Vælg billedet du vil uploade</label>
                <input type="file" name="billedet" id="fileToUpload"> // Hvor ligger filen?
          </span>

Derefter følgende php kode:
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    $navn        = test_input($_POST["navn"]);
    $adresse    = test_input($_POST["adresse"]);
    $by          = test_input($_POST["by"]);
    $afsendermail = test_input($_POST["email"]);
    $accept      = isset($_POST["accept"]);
    $billedet    = test_input($_POST["billedet"]);
}

Efterfulgt af:
    require_once("class.phpmailer.php");
    $email = new PHPMailer();
    $email->isHTML(true);
    $email->From      = $afsendermail;
    $email->FromName  = $navn;
    $email->Subject  = $emne;
    $email->Body      = $besked;
    $email->addAddress( $til );
    $file_to_attach = 'PATH_OF_YOUR_FILE_HERE'; // Hvor ligger filen?
    $email->addAttachment( $billedet );
    $email->send();

Du kan se en midlertidig side på:
http://www.radioringkobing.dk/RRL/LakerolKonkurrence.php
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
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

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