Posts Tagged ‘email in php’


Integrate your MailChimp Newsletter Subscription (form)
Integrate a Newsletter Subscription Form with MailChimp’s API

MailChimp’s simple and direct API makes it easy to access the email service provider’s list management tools.

MailChimp is popular with small ecommerce site owners, thanks to the company’s “Free Forever” plan that allows a marketer to send as many as 12,000 emails per month at no charge. In this article, I will describe how to create a basic newsletter subscription form that uses the MailChimp API to automatically add subscribers to a MailChimp list, with some basic PHP and HTML5. This tutorial assumes that you are working with a web server that has PHP installed.

It is worth noting that MailChimp provides excellent API documentation and examples on its developer site.

Build the HTML Form

The first step toward creating a newsletter subscription form that is connected to the MailChimp API is to create the HTML form. In this example, my form collects the user’s email address, first (given) name, and last (family) name.

<form method="get" id="subscription-form">
<ul>
		<li>
			<label for="subscribe_email">Email Address, Please:</label>
			<input type="email" name="subscribe_email" id="subscribe_email" required aria-required="true" autocomplete>					
		</li>
		<li>
			<label for="subscribe_firstname">Given Name, Please:</label>
			<input type="text" name="subscribe_firstname" id="subscribe_firstname" required aria-required="true" >					
		</li>
		<li>
			<label for="subscribe_familyname">Family Name, Please:</label>
			<input type="text" name="subscribe_familyname" id="subscribe_familyname" required aria-required="true" >					
		</li>
		<li>
<button type="submit">Subscribe to Newsletter</button>				
		</li>			
	</ul>
</form>

There are a couple things to notice about this form. First, I am using the “get” method, which is how I will pass the values from the input fields to the MailChimp API. Notice, also, that I am using the HTML5 “email” input type for my “subscribe_email” field. This input type will do basic email address validation without any JavaScript or PHP coding. Finally, notice that I have made all of the fields required, and I am using aria-required=”true” to help visually impaired users. With a little CSS3, my form will look something like the following. Of course, it won’t do anything yet.

Establish a MailChimp Account

Since I am focusing on working with the MailChimp API, it stands to reason that you will need a MailChimp account. Once you have registered for a MailChimp account and created a list (since our goal is to add subscribers to that list via the API), you will need to collect two numbers for the MailChimp API.

First, you need the unique list ID. You can find this list ID by navigating to Lists > Settings in the MailChimp interface. Select a list and the unique list ID will be near the bottom of the page.

Next, you need an API key. To generate this key, navigate to Account > API Keys & Authorized Apps in the MailChimp navigation. You will need to “add a key” and then almost instantly, MailChimp will display your new key.

Download the MailChimp API for PHP

Once you have unzipped the MailChimp download, you will need to place at least MCAPI.class.php and store-address.php in your site’s folder structure.

Update store-address.php

In an effort to be an appropriately lazy developer (remember that an efficient developer often reuses code), I simply used the store-address.php file MailChimp provided as an example, rather than writing a similar bit of PHP myself. From this code, I removed several lines that I did not need.

You will need to add your API key and unique list ID to this code as the values for the variables $api and $listid. Notice also that I have inserted my form input field names as the specific keys for the $GET superglobal. (In PHP, a “superglobal” is a built-in variable available in any scope.)

<?php /*/////////////////////////////////////////////////////////////////////// Part of the code  by xyz (aa@xyz.com) http://xyz.com Distributed under Creative Commons license http://creativecommons.org/licenses/by-sa/3.0/us/ ///////////////////////////////////////////////////////////////////////*/ function storeAddress(){ require_once(‘MCAPI.class.php’);
$api = new MCAPI(‘YOUR_API_KEY_GOES_HERE’); $list_id = “YOUR_LIST_ID_GOES_HERE”; $mergeVars = array(
‘FNAME’=>$_GET[‘subscribe_firstname’], ‘LNAME’=>$_GET[‘subscribe_familyname’]
); if($api->listSubscribe($list_id, $_GET[‘subscribe_email’], $mergeVars) === true) { return ‘Success. Check your email to confirm sign up.’; }else{ // An error occurred, return error message return ‘Error: ‘ . $api->errorMessage; } } ?>

To reference this file from my subscription.php file, I used PHP’s built inrequire_once.

<?php require_once (‘store-address.php’); ?>

I want the page to display the subscription form when a user first arrives and display a success message once the form has been filled out. So I wrapped the form in a conditional statement that checks for the existence of a “subscribeemail” key in the $GET superglobal. I used the NOToperator “!” So my conditional reads, “if subscribeemail does _not exist, do the following.”

I am mixing PHP and HTML here, so I use PHP’s alternative syntax.

<?php if (!$_GET[“subscribe_email”]): ?>
… // from HTML here
<?php endif; ?>

I used a similar conditional statement to display the success message.

<?php if ($_GET[“subscribe_email”]): ?>
<p>Thank you for subscribing to xyz.com. Look for a confirmation email soon.</p>
<?php endif; ?>

hat is it. When a user completes the form and clicks the submit button, the MailChimp API will generate a confirmation email and — once the confirmation is complete — the subscriber is added to the MailChimp list.

Advertisements

PHP SMTP e-mail script comparison : PHP Mail Scripts using SMTP transport, a guide for beginners
How to Send Email from a PHP Script Using SMTP Authentication

Part of what makes the PHP mail() function is so simple is its lack of flexibility. Most importantly and frustratingly, the stock mail() does not usually allow you to use the SMTP server of your choice, and it does not support SMTP authentication, required by many a mail server today, at all.

Fortunately, overcoming PHP’s built-in shortcomings need not be difficult, complicated or painful either. For most email uses, the free PEAR Mail package offers all the power and flexibility needed, and it authenticates with your desired outgoing mail server, too. For enhanced security, secure SSL connections are supported.

Send Email from a PHP Script Using SMTP Authentication

To connect to an outgoing SMTP server from a PHP script using SMTP authentication and send an email:

  • Make sure the PEAR Mail package is installed.
    • Typically, in particular with PHP 4 or later, this will have already been done for you. Just give it a try.
  • Adapt the example below for your needs. Make sure you change the following variables at least:
    • from: the email address from which you want the message to be sent.
    • to: the recipient’s email address and name.
    • host: your outgoing SMTP server name.
    • username: the SMTP user name (typically the same as the user name used to retrieve mail).
    • password: the password for SMTP authentication.
Sending Mail from PHP Using SMTP Authentication – Example
<?php require_once "Mail.php"; $from = "Sandra Sender <sender@example.com>"; $to = "Ramona Recipient <recipient@example.com>"; $subject = "Hi!"; $body = "Hi,\n\nHow are you?"; $host = "mail.example.com"; $username = "smtp_username"; $password = "smtp_password"; $headers = array ('From' => $from,   'To' => $to,   'Subject' => $subject); $smtp = Mail::factory('smtp',   array ('host' => $host,     'auth' => true,     'username' => $username,     'password' => $password)); $mail = $smtp->send($to, $headers, $body); if (PEAR::isError($mail)) {   echo("<p>" . $mail->getMessage() . "</p>");  } else {   echo("<p>Message successfully sent!</p>");  } ?>
Sending Mail from PHP Using SMTP Authentication and SSL Encryption – Example
<?php require_once "Mail.php"; $from = "Sandra Sender <sender@example.com>"; $to = "Ramona Recipient <recipient@example.com>"; $subject = "Hi!"; $body = "Hi,\n\nHow are you?"; $host = "ssl://mail.example.com"; $port = "465"; $username = "smtp_username"; $password = "smtp_password"; $headers = array ('From' => $from,   'To' => $to,   'Subject' => $subject); $smtp = Mail::factory('smtp',   array ('host' => $host,     'port' => $port,     'auth' => true,     'username' => $username,     'password' => $password)); $mail = $smtp->send($to, $headers, $body); if (PEAR::isError($mail)) {   echo("<p>" . $mail->getMessage() . "</p>");  } else {   echo("<p>Message successfully sent!</p>");  } ?>


How-to use PHPMailer for SMTP and GMail : PHP mail using GMail SMTP and PHPMailer
Sending e-mails via SMTP with PHPmailer and Gmail

I have been a fan of PHPMailer for quite some time. It is a very easy to use class that offers much more power than the regular PHP mail function. Although one problem I have had PHPMailer have been its rather poor documentation. Methods and attributes are split up with examples and tutorials seemingly overlapping but disconnected as well. However this is a small fault for such a great contribution to the PHP development community.

A thing I found hard to find was a specific example of how to set up PHPMailer to work with a GMail SMTP server. The results are actually quite simple and I managed to get it working with only a few tries. However if you are reading this you probably do not want to waste that 10 minutes, so I’ll just show you the sample code below.

$pm = new PHPMailer();
$pm->IsSMTP(true);
$pm->Host = 'ssl://smtp.gmail.com:465';
$pm->SMTPAuth = true;
$pm->Username = 'yourusername@gmail.com';
$pm->Password = 'yourpassword';

The above code shows all the configuration settings that need to be set. I will not reproduce the normal message attribute settings needed for sending mail in PHP with PHPMailer as you can find them at the PHPMailer website.