Sök…


parametrar

Parameter detaljer
string $to Mottagarens e-postadress
string $subject Ämnesraden
string $message E-postens kropp
string $additional_headers Valfritt: rubriker att lägga till i e-postmeddelandet
string $additional_parameters Valfritt: argument för att skicka till det konfigurerade e-postsändningsprogrammet på kommandoraden

Anmärkningar

E-post som jag skickar via mitt skript kommer aldrig. Vad ska jag göra?

  • Se till att felrapporteringen är aktiverad för att se några fel.

  • Om du har tillgång till PHP: s felloggfiler, kontrollera dessa.

  • Är kommandot mail() konfigurerat korrekt på din server ? (Om du deltar i delad hosting kan du inte ändra någonting här.)

  • Om e-post bara försvinner, starta ett e-postkonto med en freemail-tjänst som har en skräppostmapp (eller använd ett e-postkonto som inte alls skräppostfiltrerar). På detta sätt kan du se om e-postmeddelandet inte skickas ut eller kanske skickas utan filtreras som skräppost.

  • Kollade du "från:" -adressen du använde för möjliga "returnerade till avsändare" -meddelanden? Du kan också ställa in en separat avvisningsadress för felmeddelanden.

E-postmeddelandet jag skickar filtreras som skräppost. Vad ska jag göra?

  • Tillhör avsändaradressen ("Från") en domän som körs på servern du skickar e-postmeddelandet från? Om inte, ändra det.

    [email protected] aldrig avsändaradresser som [email protected] . Använd reply-to om du behöver svar för att komma till en annan adress.

  • Är din server på en svartlista? Detta är en möjlighet när du deltar på delad hosting när grannarna uppför sig dåligt. De flesta leverantörer av svartlistor, som Spamhaus , har verktyg som gör att du kan leta upp din server IP. Det finns också verktyg från tredje part som MX Toolbox.

  • Vissa installationer av PHP kräver att en femte parameter ställs in på post () för att lägga till en avsändaradress. Se om detta kan vara fallet för dig.

  • Om allt annat misslyckas kan du överväga att använda e-post-som-en-tjänst som Mailgun , SparkPost , Amazon SES , Mailjet , SendinBlue eller SendGrid — för att nämna några - istället. De har alla API: er som kan kallas med PHP.

Skicka e-post - Grunderna, mer information och ett fullständigt exempel

En typisk e-post har tre huvudkomponenter:

  1. En mottagare (representerad som en e-postadress)
  2. Ett ämne
  3. Ett meddelandeorgan

Att skicka e-post i PHP kan vara lika enkelt som att ringa den inbyggda funktionsmailen mail() . mail() tar upp till fem parametrar men de första tre är allt som krävs för att skicka ett e-postmeddelande (även om de fyra parametrarna vanligtvis används som kommer att visas nedan). De första tre parametrarna är:

  1. Mottagarens e-postadress (sträng)
  2. E-postens ämne (sträng)
  3. E-postens kropp (sträng) (t.ex. innehållet i e-postmeddelandet)

Ett minimalt exempel skulle likna följande kod:

mail('[email protected]', 'Email Subject', 'This is the email message body');

Det enkla exemplet ovan fungerar bra under begränsade omständigheter, såsom hårdkodning av en e-postvarning för ett internt system. Det är emellertid vanligt att placera data som skickas som parametrar för e- mail() i variabler för att göra koden renare och enklare att hantera (till exempel genom att dynamiskt bygga ett e-postmeddelande från en formulärinsändning).

Dessutom accepterar e- mail() en fjärde parameter som låter dig skicka ytterligare e-posthuvuden med din e-post. Med dessa rubriker kan du ställa in:

  • From namn och e-postadress som användaren ser
  • Reply-To e-postadressen som användarens svar kommer att skickas till
  • ytterligare rubriker som inte är standarder som X-Mailer som kan berätta för mottagaren att detta e-postmeddelande skickades via PHP
$to      = '[email protected]';             // Could also be $to      = $_POST['recipient'];  
$subject = 'Email Subject';                     // Could also be $subject = $_POST['subject'];  
$message = 'This is the email message body';    // Could also be $message = $_POST['message'];  
$headers = implode("\r\n", [
    'From: John Conde <[email protected]>',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION
]);

Den frivilliga femte parametern kan användas för att skicka ytterligare flaggor som kommandoradsalternativ till det program som är konfigurerat för att användas vid skicka e-post, enligt definitionen av konfigurationsinställningen sendmail_path . Till exempel kan detta användas för att ställa in kuvertets avsändaradress när du använder sendmail / postfix med alternativet -f sendmail.

$fifth  = '[email protected]';

Även om användning av e- mail() kan vara ganska tillförlitlig, är det inte alls garanterat att ett e-postmeddelande skickas när e- mail() anropas. För att se om det finns ett potentiellt fel när du skickar din e-post, bör du fånga returvärdet från e- mail() . TRUE kommer att returneras om posten godkändes för leverans. Annars får du FALSE .

$result = mail($to, $subject, $message, $headers, $fifth);

OBS : Även om e- mail() kan returnera TRUE , betyder det inte att e-postmeddelandet skickades eller att e-postmeddelandet kommer att tas emot av mottagaren. Det indikerar bara att e-postmeddelandet framgångsrikt överlämnades till ditt systems e-postsystem.

Om du vill skicka ett HTML-e-postmeddelande finns det inte mycket mer arbete du behöver göra. Du behöver:

  1. Lägg till MIME-Version rubrik
  2. Lägg till rubriken Content-Type
  3. Se till att ditt e-postinnehåll är HTML
$to      = '[email protected]';                            
$subject = 'Email Subject';                                     
$message = '<html><body>This is the email message body</body></html>';       
$headers = implode("\r\n", [
    'From: John Conde <[email protected]>',
    'Reply-To: [email protected]',
    'MIME-Version: 1.0',
    'Content-Type: text/html; charset=ISO-8859-1',
    'X-Mailer: PHP/' . PHP_VERSION
]);

Här är ett fullständigt exempel på att använda PHPs mail() -funktion

<?php

// Debugging tools. Only turn these on in your development environment.

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

// Special mail settings that can make mail less likely to be considered spam
// and offers logging in case of technical difficulties.

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

// The components of our email

$to      = '[email protected]';
$subject = 'Email Subject';
$message = 'This is the email message body';
$headers = implode("\r\n", [
    'From: [email protected]',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION
]);

// Send the email

$result = mail($to, $subject, $message, $headers);

// Check the results and react accordingly

if ($result) {
  
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
  
}
else {
  
    // Your mail was not sent. Check your logs to see if
    // the reason was reported there for you.
  
}

Se även

Officiell dokumentation

Relaterade stacköverflödesfrågor

Alternativa mailers

E-postservrar

Relaterade ämnen

Skicka HTML-e-post med e-post ()

<?php
$to      = '[email protected]';
$subject = 'Sending an HTML email using mail() in PHP';
$message = '<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>';

$headers = implode("\r\n", [
    "From: John Conde <[email protected]>",
    "Reply-To: [email protected]",
    "X-Mailer: PHP/" . PHP_VERSION,
    "MIME-Version: 1.0",
    "Content-Type: text/html; charset=UTF-8"
]);

mail($to, $subject, $message, $headers);

Det här är inte mycket annorlunda än att skicka en vanlig text-e-post . De viktigaste skillnaderna i innehållskroppen är strukturerade som ett HTML-dokument och det finns ytterligare två rubriker som måste inkluderas så att e-postklienten vet att skicka e-postmeddelandet som HTML. Dom är:

  • MIME-version: 1.0
  • Innehållstyp: text / html; charset = UTF-8

Skicka vanlig text-e-post med PHPMailer

Grundläggande text-e-post

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email using PHPMailer.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Mailer Error: " . $mail->ErrorInfo;
}

Lägga till ytterligare mottagare, CC-mottagare, BCC-mottagare

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); 
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email using PHPMailer.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

Skicka e-post med en bilaga med post ()

<?php

$to         = '[email protected]';
$subject    = 'Email Subject';
$message    = 'This is the email message body';

$attachment = '/path/to/your/file.pdf';
$content = file_get_contents($attachment);

/* Attachment content transferred in Base64 encoding
MUST be split into chunks 76 characters in length as
specified by RFC 2045 section 6.8. By default, the
function chunk_split() uses a chunk length of 76 with
a trailing CRLF (\r\n). The 76 character requirement
does not include the carriage return and line feed */
$content = chunk_split(base64_encode($content));

/* Boundaries delimit multipart entities. As stated
in RFC 2046 section 5.1, the boundary MUST NOT occur
in any encapsulated part. Therefore, it should be
unique. As stated in the following section 5.1.1, a
boundary is defined as a line consisting of two hyphens
("--"), a parameter value, optional linear whitespace,
and a terminating CRLF. */
$prefix     = "part_"; // This is an optional prefix
/* Generate a unique boundary parameter value with our
prefix using the uniqid() function. The second parameter
makes the parameter value more unique. */
$boundary   = uniqid($prefix, true);

// headers
$headers    = implode("\r\n", [
    'From: [email protected]',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION,
    'MIME-Version: 1.0',
    // boundary parameter required, must be enclosed by quotes
    'Content-Type: multipart/mixed; boundary="' . $boundary . '"',
    "Content-Transfer-Encoding: 7bit",
    "This is a MIME encoded message." // message for restricted transports
]);

// message and attachment
$message    = implode("\r\n", [ 
    "--" . $boundary, // header boundary delimiter line
    'Content-Type: text/plain; charset="iso-8859-1"',
    "Content-Transfer-Encoding: 8bit",
    $message,
    "--" . $boundary, // content boundary delimiter line
    'Content-Type: application/octet-stream; name="RenamedFile.pdf"',
    "Content-Transfer-Encoding: base64",
    "Content-Disposition: attachment",
    $content,
    "--" . $boundary . "--" // closing boundary delimiter line
]);

$result = mail($to, $subject, $message, $headers); // send the email

if ($result) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
}
else {
    // Your mail was not sent. Check your logs to see if
    // the reason was reported there for you.
}

Content-Transfer-Kodningar

De tillgängliga kodningarna är 7bit , 8bit , binär , citerad-utskrivbar , base64 , ietf-token och x-token . När en rubrik har en multipart innehållstyp får dessa kodningar inte vara något annat värde än 7 bit , 8 bit eller binärt som anges i RFC 2045, avsnitt 6.4.

Vårt exempel väljer 7bit-kodningen, som representerar US-ASCII-tecken, för multipartrubrik eftersom, som noterat i RFC 2045 avsnitt 6, vissa protokoll endast stöder denna kodning. Data inom gränserna kan sedan kodas på en delvis del (RFC 2046, avsnitt 5.1). Detta exempel gör exakt detta. Den första delen, som innehåller textmeddelandet, definieras som 8bit eftersom det kan vara nödvändigt att stödja ytterligare tecken. I det här fallet används teckenuppsättningen Latin1 (iso-8859-1). Den andra delen är bilagan och så definieras den som en bas64-kodad applikation / oktettström. Eftersom base64 omvandlar godtyckliga data till 7bit-intervallet kan de skickas över begränsade transporter (RFC 2045, avsnitt 6.2).

Skicka HTML-e-post med PHPMailer

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); 
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");
$mail->Subject  = "Subject Text";
$mail->isHTML(true);
$mail->Body     = "<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>";
$mail->AltBody = "This paragraph is not bold.\n\nThis text is not italic.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

Skicka e-post med en bilaga med PHPMailer

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email with an attachment using PHPMailer.";

// Add Static Attachment
$attachment = '/path/to/your/file.pdf';
$mail->AddAttachment($attachment , 'RenamedFile.pdf');

// Add Second Attachment, run-time created. ie: CSV to be open with Excel
$csvHeader = "header1,header2,header3";
$csvData = "row1col1,row1col2,row1col3\nrow2col1,row2col2,row2col3";

$mail->AddStringAttachment($csvHeader ."\n" . $csvData, 'your-csv-file.csv', 'base64', 'application/vnd.ms-excel');

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

Skicka vanlig text-e-post med Sendgrid

Grundläggande text-e-post

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setText("This is a sample basic text email using ");

$sendgrid->send($email);

Lägga till ytterligare mottagare, CC-mottagare, BCC-mottagare

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setHtml("<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>");
      
$personalization = new Personalization();
$email = new Email("Recepient Name", "[email protected]");
$personalization->addTo($email);
$email = new Email("RecepientCC Name", "[email protected]");
$personalization->addCc($email);
$email = new Email("RecepientBCC Name", "[email protected]");
$personalization->addBcc($email);
$email->addPersonalization($personalization);
    
$sendgrid->send($email);

Skicka e-post med en bilaga med Sendgrid

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setText("This is a sample basic text email using ");
      
$attachment = '/path/to/your/file.pdf';
$content    = file_get_contents($attachment);
$content    = chunk_split(base64_encode($content));

$attachment = new Attachment();
$attachment->setContent($content);
$attachment->setType("application/pdf");
$attachment->setFilename("RenamedFile.pdf");
$attachment->setDisposition("attachment");
$email->addAttachment($attachment);

$sendgrid->send($email);


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow