A new approach on debt collection – iDEAL E-mail

Project: iDEAL Email

Project Url: http://www.nibincasso.nl

Project delivery: May 22, 2008


Description: NIB Incasso is a major debt collection agency in the Netherlands. It is always innovating in the way they contact their debtors.

NIB Incasso presents their clients with a a-la-carte concept for debt collection. Their clients can choose from several building blocks to create a work flow that fits their own ways best. They can choose between numerous letters in a specific order, calling from debt-collectors to the debtors, sms, etc.

They asked me for a new way and I came up with the following concept: ideal E-mail

E-mail is the one thing that is missing from the flow and it is so much cheaper than a letter on expensive paper with a stamp. The concept was quickly approved and developed by myself with the following screens / steps:


Step 1: NIB Incasso gets debtor information from their client and put it in the debt collection system

Step 2: The debt collection system will generate a batch of e-mail addresses with corresponding invoice details for all clients who have iDEAL E-mail in their workflow

Step 3: The e-mail is sent out to the debtors

schermafdruk-gmail-nib-incasso-ideal-factuur-dossiernummer-99999-peterruitergmailcom-shiretoko Step 4: The debtor receives the mail with customized text (this text can be different for all clients and clients can have several sorts of letters)
schermafdruk-shiretoko Step 5: The debtor clicks on the link in the text or on the header image to go to a personalised landingspage where they can pay the invoice online via iDEAL (Dutch payment provider)


Step 6: The debtor’s original e-mail represents the current invoice status


When the e-mail is older then 14 days the header automatically states that they can not use that e-mail anymore to pay their invoice. This is because NIB incasso sends them a new one with higher costs after 14 days or the client has requested a next step in the workflow after that time.


When an invoice is not found or the encoded URL is being altered the viewer gets a screen that states that there is no status information.

This was all done with the GD library and a bit of PHP code. The trick is to link the email image to a serverside php script that will get the base image and print in the rest of the details of the debtor with GD.

function statusImage ($SourceFile, $Begunstigde, $Saldo, $Omschrijving, $Kenmerk, $Klantkenmerk, $Betaaldatum, $DestinationFile) {
   list($width, $height) = getimagesize($SourceFile);
   $image_p = imagecreatetruecolor($width, $height);
   $image = imagecreatefromjpeg($SourceFile);
   imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height);
   $white = imagecolorallocate($image_p, 255, 255, 255);
   $grey = imagecolorallocate($image_p, 128, 128, 128);
   $black = imagecolorallocate($image_p, 0, 0, 0);
   $font = 'Vera.ttf';
   $font_size = 8;

   imagettftext($image_p, $font_size, 0, 494, 31, $white, $font, $Begunstigde);
   imagettftext($image_p, $font_size, 0, 494, 44, $white, $font, $Saldo);
   imagettftext($image_p, $font_size, 0, 495, 59, $white, $font, $Omschrijving);
   imagettftext($image_p, $font_size, 0, 495, 72, $white, $font, $Kenmerk);
   imagettftext($image_p, $font_size, 0, 495, 85, $white, $font, $Klantkenmerk);
   imagettftext($image_p, $font_size, 0, 495, 98, $white, $font, $Betaaldatum);

   if ($DestinationFile<>'') {
	  imagejpeg ($image_p, $DestinationFile, 100);
   } else {
	  header('Content-Type: image/jpeg');
	  imagejpeg($image_p, null, 100);

if ($paid=='Openstaand') {
	$SourceFile = '/httpdocs/images/nietbetaald.jpg';
	$Begunstigde = ':  '. $row_dossierdetails['dossier_begunstigde'];
	$Saldo = ':  '. $row_dossierdetails['dossier_saldo']. '  EUR';
	$Omschrijving = ':  '. $row_dossierdetails['dossier_nummer'];
	$Kenmerk = ':  '. $row_dossierdetails['dossier_klant'];
        $Klantkenmerk = ':  '.$row_dossierdetails['dossier_klantkenmerk'];
	$Betaaldatum = ':  '. $row_dossierdetails['dossier_factuurdatum'];
	statusImage ($SourceFile, $Begunstigde, $Saldo, $Omschrijving,
        $Kenmerk, $Klantkenmerk, $Betaaldatum, $DestinationFile);

elseif ($paid=='Betaald') {
	$SourceFile = '/httpdocs/images/betaald.jpg';
	$Begunstigde = ':  '. $row_dossierdetails['dossier_begunstigde'];
	$Saldo = ':  '. $row_dossierdetails['dossier_saldo']. '  EUR';
	$Omschrijving = ':  '. $row_dossierdetails['dossier_nummer'];
	$Kenmerk = ':  '. $row_dossierdetails['dossier_klant'];
       	$Klantkenmerk = ':  '.$row_dossierdetails['dossier_kenmerk'];
	$Betaaldatum = ':  '. $row_dossierdetails['dossier_betaaldatum'];
	statusImage ($SourceFile, $Begunstigde, $Saldo, $Omschrijving,
        $Kenmerk, $Klantkenmerk, $Betaaldatum, $DestinationFile);
elseif ($paid=='Vervallen') {
	$SourceFile = '/httpdocs/images/vervallen.jpg';
	statusImage ($SourceFile, $Begunstigde, $Saldo, $Omschrijving,
        $Kenmerk, $Klantkenmerk, $Betaaldatum, $DestinationFile);
elseif ($paid=='Geen informatie beschikbaar') {
	$SourceFile = '/httpdocs/images/geenstatus.jpg';
	statusImage ($SourceFile, $Begunstigde, $Saldo, $Omschrijving,
        $Kenmerk, $Klantkenmerk, $Betaaldatum, $DestinationFile);