Hi, I am having issues verifying my domain for bulk emails. I have inserted all the SPF/DKIM records correctly, however my domain still says unverified. 

Why would it still be unverified and what does it take to make it verified? 

Thanks

Like 0

Like

3 comments

Could you please specify which provider do you have: Elastic or UniOne? Also could you please double check that you've done all settings as in instructions below: 

Elastic - https://academy.bpmonline.com/documents/marketing/7-14/domain-verification-elastic-email-provider#XREF_51877__Elastic_Email

UniOne - https://academy.bpmonline.com/documents/marketing/7-14/domain-verification-unione-provider#XREF_14050__UniOne

Best regards,

Dennis  

Dennis Hudson,

We use Elastic Email and have gone through all of the instructions. How long does it take to verify? Is there any other reason why it wouldn't be verified? 

Thanks

Collette,

Unfortunately automated domain verification period is not predictable, but as usual Elastic performs automated checking once per day. It is better to contact us at support@bpmonline.com and provide us with the link to the application where you've added the domain and also with domain name itself and we will perform manual check. We are also planning to add information on automated domain verification check on the Academy and we are discussing this information with Elastic and UniOne and once done - we will update all our clients in Release notes section of our website.

Best regards,

Oscar

Show all comments

I am trying to set up a trigger email at the moment for anyone who downloads a whitepaper from our website. The email will have the whitepaper either attached or preferably linked in the body. How do I go about doing that?

Like 0

Like

3 comments

Hello Collette,

Bulk/trigger emails are not supposed to have files attached to them since email provider can reject sending this email. The only way to have pdf file being attached to an email if it is trigger/bulk email - is to put this file as a link to a body of an email. Your file should be stored in some public storage that can be accessible by anyone and the link to it will be like this https://test_storage_system/$File/TestSheet.pdf. But if you put this link to the body of an email - recipients will get an error when open it. So you need to use OpenElement parameter at the end and make the link look like this https://test_storage_system/$File/TestSheet.pdf?OpenElement. As a result users will see opened pdf document (which they can download after that) that can be accessed from your bulk/trigger email.

Best regards,

Oscar

Thanks Oscar, 

Are there any add-ons in the market place that solve this? Or do you have a suggestion for a storage company that works well with bpm'online? 

Thanks

Collette,

There is no marketplace add-on that allows storing data. You need to create your own storage that can be accessible by everyone - for example public FTP storage system. Remote storage is just a remote storage and in terms of trigger/bulk emails there is no difference between them - the only requirement is that it should be accessible.

Best regards,

Oscar

Show all comments

Customization of the unsupscribe function is represented in the following php codes:

Functions:

<?php
function BPMAuth(){
    $url = 'https://bpmonline.com/ServiceModel/AuthService.svc/Login';//someBPMURL
    $requestData["UserName"] = "";
    $requestData["UserPassword"] = "";    
    $jcres = json_encode($requestData);    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jcres);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($jcres))
    );
    $result = curl_exec($ch);
    curl_close($ch);
}
function BPMQuery($json,$operation) {
    //Operations: 1-Add Data; 2 - Update Data; 3 - batch Data; 4 - SelectQuery
    switch ($operation) {
    case 1:
        $queryOperation='InsertQuery';
        break;
    case 2:
        $queryOperation='UpdateQuery';
        break;
    case 3:
        $queryOperation='BatchQuery';
        break;
    case 4:
        $queryOperation='SelectQuery';
        break;
}
    $url = 'https://bpmonline.com/0/DataService/json/SyncReply/'.$queryOperation;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($json))
    );
    return curl_exec($ch);
    curl_close($ch);
} // Sends Update Query to BPM
function BuildIdFilter(array $array){
    $i=0;
    $filter='';
    foreach ($array as $item)
        {
            if ($i!=0) $filter.=',';
            $filter.='
            "CustomFilters'.$i.'":{
            "filterType":1,
            "comparisonType":3,
            "isEnabled":true,
            "trimDateTimeParameterToDate":false,
            "leftExpression":{
    		   "expressionType":0,
    		   "columnPath":"Id"
    			},
            "rightExpression":{
               "expressionType":2,
               "parameter":{
                  "dataValueType":0,
                  "value":"'.$item.'"
               }
            }
         }';
        $i++;  
 
        }
    return $filter;
} // Build Json Array Filter
function BuildSubscribeJson($filter,$bool){
    //$filter is filter to be applied in Json
    //$bool - to set true (Subscribed) or false(unsubscribed) for subscription
    if($bool==true) {$subsvalue='1a5cd9b8-b999-4b65-b8a8-bd3168792128';}
    else {$subsvalue='c8947f80-a374-412a-bbc8-ea9068a8b78e';}
    return '{
                           "rootSchemaName":"BulkEmailSubscription",
                           "operationType":2,
                           "filters":{
                              "items":{
                                 '.$filter.'
                              },
                              "logicalOperation":1,
                              "isEnabled":true,
                              "filterType":6
                           },
                           "columnValues":{
                              "items":{
                                 "BulkEmailSubsStatus":{
                                    "expressionType":2,
                                    "parameter":{
                                       "dataValueType":10,
                                       "value":"'.$subsvalue.'"
                                    }
                                 }
                              }
                           },
                           "isForceUpdate":false
                        }';
 
}
function JsonAddNewSubscriber($contactId,array $bulkemailtype,$bool_subsctiption){
    //$contactId Id of contuct to be subscribed
    //$bulkemailtype is id of bulk email to be subscribed
    //$bool_subsctiption - to set true (Subscribed) or false(unsubscribed) for subscription
    if($bool_subsctiption==true) {$subsvalue='1a5cd9b8-b999-4b65-b8a8-bd3168792128';}
    else {$subsvalue='c8947f80-a374-412a-bbc8-ea9068a8b78e';}
    $i=0;
    $insertItems='';
 
 
    foreach ($bulkemailtype as $value) {
        if ($i!=0) $insertItems.=',';
        $insertItems.='{
            "__type": "Terrasoft.Nui.ServiceModel.DataContract.InsertQuery",
 
           "rootSchemaName":"BulkEmailSubscription",
           "operationType":1,
           "columnValues":{
              "items":{
                 "Contact":{
                    "expressionType":2,
                    "parameter":{
                       "dataValueType":10,
                       "value":"'.$contactId.'"
                    }
                 },
                 "BulkEmailType":{
                    "expressionType":2,
                    "parameter":{
                       "dataValueType":10,
                       "value":"'.$value.'"
                    }
                 },
                 "BulkEmailSubsStatus":{
                    "expressionType":2,
                    "parameter":{
                       "dataValueType":10,
                       "value":"'.$subsvalue.'"
                    }
                 }
              }
           }
 
        }';
        $i++;
    }
    return '{"items": ['.$insertItems.']}';
}
function ContactUnsubscribe($contactId,$bool){
    return '{
  "rootSchemaName": "Contact",
  "operationType": 2,
  "filters": {
    "items": {
      "primaryColumnFilter": {
        "filterType": 1,
        "comparisonType": 3,
        "isEnabled": true,
        "trimDateTimeParameterToDate": false,
        "leftExpression": {
          "expressionType": 1,
          "functionType": 1,
          "macrosType": 34
        },
        "rightExpression": {
          "expressionType": 2,
          "parameter": {
            "dataValueType": 0,
            "value": "'.$contactId.'"
          }
        }
      }
    },
    "logicalOperation": 0,
    "isEnabled": true,
    "filterType": 6
  },
  "columnValues": {
    "items": {
      "DoNotUseEmail": {
        "expressionType": 2,
        "parameter": {
          "dataValueType": 12,
          "value": '.$bool.'
        }
      }
    }
  },
  "isForceUpdate": false
}'; // Json Request
}
function JsonSelectSubscriptions($contactId){
    $json= '{
       "rootSchemaName":"BulkEmailSubscription",
       "operationType":0,
       "filters":{
          "items":{
             "customFilterContact_BulkEmailSubscription":{
                "filterType":1,
                "comparisonType":3,
                "isEnabled":true,
                "trimDateTimeParameterToDate":false,
                "leftExpression":{
                   "expressionType":0,
                   "columnPath":"Contact"
                },
                "rightExpression":{
                   "expressionType":2,
                   "parameter":{
                      "dataValueType":10,
                      "value":"'.$contactId.'"
                   }
                }
             }
          },
          "logicalOperation":0,
          "isEnabled":true,
          "filterType":6
       },
       "columns":{
          "items":{
             "Id":{
                "caption":"",
                "orderDirection":0,
                "orderPosition":-1,
                "isVisible":true,
                "expression":{
                   "expressionType":0,
                   "columnPath":"Id"
                }
             },
             "BulkEmailType":{
                "caption":"Bulk email type",
                "orderDirection":0,
                "orderPosition":-1,
                "isVisible":true,
                "expression":{
                   "expressionType":0,
                   "columnPath":"BulkEmailType"
                }
             },
             "BulkEmailSubsStatus":{
                "caption":"Subscription status",
                "orderDirection":0,
                "orderPosition":-1,
                "isVisible":true,
                "expression":{
                   "expressionType":0,
                   "columnPath":"BulkEmailSubsStatus"
                }
             }
          }
       },
       "isDistinct":false,
       "rowCount":30,
       "rowsOffset":0,
       "isPageable":false,
       "allColumns":false,
       "useLocalization":true,
       "useRecordDeactivation":false,
       "serverESQCacheParameters":{
          "cacheLevel":0,
          "cacheGroup":"",
          "cacheItemName":""
       },
       "queryOptimize":false,
       "useMetrics":false,
       "querySource":0,
       "ignoreDisplayValues":false,
       "conditionalValues":null,
       "isHierarchical":false
    }'; // Json Request
    return $json;
}
function JsonSelectdefaultchannels(){
    $json= '{"rootSchemaName":"BulkEmailType","operationType":0,"filters":{"items":{"64ae0f22-cb41-4599-97c1-3571c0fe56f3":{"items":{},"logicalOperation":0,"isEnabled":true,"filterType":6}},"logicalOperation":0,"isEnabled":true,"filterType":6},"columns":{"items":{"Id":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Id"}},"Name":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Name"}},"Description":{"caption":"Description","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Description"}},"IsSignable":{"caption":"Can be subscriber","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"IsSignable"}},"EntryPointsCount":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":3,"aggregationType":1,"columnPath":"[EntryPoint:EntityId].Id","subFilters":{"items":{"c0c2fa11-5faa-415d-98d6-83df4bb90770":{"filterType":1,"comparisonType":3,"isEnabled":true,"trimDateTimeParameterToDate":false,"leftExpression":{"expressionType":0,"columnPath":"IsActive"},"rightExpression":{"expressionType":2,"parameter":{"dataValueType":1,"value":true}}}},"logicalOperation":0,"isEnabled":true,"filterType":6}}},"CreatedOn":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"CreatedOn"}},"CreatedBy":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"CreatedBy"}},"ModifiedOn":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"ModifiedOn"}},"ModifiedBy":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"ModifiedBy"}},"ProcessListeners":{"caption":"","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"ProcessListeners"}}}},"isDistinct":false,"rowCount":30,"rowsOffset":0,"isPageable":true,"allColumns":false,"useLocalization":true,"useRecordDeactivation":false,"serverESQCacheParameters":{"cacheLevel":0,"cacheGroup":"","cacheItemName":""},"queryOptimize":false,"useMetrics":false,"querySource":0,"ignoreDisplayValues":false,"conditionalValues":null,"isHierarchical":false}';
    return $json;
}
function JsonSelectEmailStatus($contactId){
    $json= '{
       "rootSchemaName":"Contact",
       "operationType":0,
       "filters":{
          "items":{
    		 "CustomFilters":{
    			"filterType":1,
    			"comparisonType":3,
    			"isEnabled":true,
    			"trimDateTimeParameterToDate":false,
    			"leftExpression":{
    			   "expressionType":0,
    			   "columnPath":"Id"
    			},
    			"rightExpression":{
    			   "expressionType":2,
    			   "parameter":{
    				  "dataValueType":0,
    				  "value":"'.$contactId.'"
    			   }
    			}
    		 }
    	  },
          "logicalOperation":0,
          "isEnabled":true,
          "filterType":6
       },
       "columns":{
          "items":{
             "DoNotUseEmail":{
                "caption":"Do not use email",
                "orderDirection":0,
                "orderPosition":-1,
                "isVisible":true,
                "expression":{
                   "expressionType":0,
                   "columnPath":"DoNotUseEmail"
                }
             }
          }
       },
       "isDistinct":false,
       "rowCount":30,
       "rowsOffset":0,
       "isPageable":false,
       "allColumns":false,
       "useLocalization":false,
       "useRecordDeactivation":false,
       "serverESQCacheParameters":{
          "cacheLevel":0,
          "cacheGroup":"",
          "cacheItemName":""
       },
       "queryOptimize":false,
       "useMetrics":false,
       "querySource":0,
       "ignoreDisplayValues":false,
       "conditionalValues":null,
       "isHierarchical":false
    }';
    return $json;
}

Unsubscription channels:

<?php
$contactId=$_GET['contactId'];
//contactId for test = 2480fb60-43d1-4a58-9011-0f859b431670 for test
require_once( MODX_CORE_PATH . 'model/bpmintegration/bpm_bulk_subscriptionsFunctions.php');
BPMAuth();
$jsonUseEmailQuery = JsonSelectEmailStatus($contactId);
$result = BPMQuery($jsonUseEmailQuery,4);
$r0 = json_decode($result,true);
$requestData1 = JsonSelectSubscriptions($contactId);
$result = BPMQuery($requestData1,4);
$r=json_decode($result, true);
$requestData1=JsonSelectdefaultchannels();
$result = BPMQuery($requestData1,4);
$r2=json_decode($result, true);
{//building html form 
    echo '<form method = "post" action = "/index.php?id=14&contactId='.$contactId.'">';
    if ($r0["rows"]["0"]["DoNotUseEmail"]==1) {
 
        echo '<h4>You are currently Unsubscribed from all emails, please uncheck Subscribe me back, if you wish to keep current setting on.</h4>';
        echo '<input type="checkbox" name="Subscribemeback" value="1" checked> Subscribe me back <br>';
    }
    echo '<h2>Subsctiption types</h2>';
    //print_r($r);
    foreach ($r["rows"] as $value) {
        echo '<input type="checkbox" style="display:none" name="SubscriptionData[]" value="'.$value["Id"].'" checked>';
        if ($value["BulkEmailSubsStatus"]["displayValue"]=='Subscribed'){
            echo '<input type="checkbox" name="CurrentSubscription[]" value="'.$value["Id"].'" checked> '.$value["BulkEmailType"]["displayValue"].'<br/>';
        }else{
            echo '<input type="checkbox" name="CurrentSubscription[]" value="'.$value["Id"].'"> '.$value["BulkEmailType"]["displayValue"].'<br/>';
        }
        } // Display channels already set for client
    foreach ($r2["rows"] as $value){
        foreach ($r["rows"] as $value1) {
            if ($value["Id"]==$value1["BulkEmailType"]["value"]){
                $exist=1;
            }
        }
     if (!$exist) {
         echo '<input type="checkbox" style="display:none" name="defaultsubscriptionschannels[]" value="'.$value["Id"].'" checked>';
         echo '<input type="checkbox" name="defaultsubscriptions[]" value="'.$value["Id"].'" checked> '.$value["Name"].'<br/>';
     } //if there is no such channel in basic subscription - echo some inputs
     else unset ($exist);
    } // Display Default Channels
    if ($r0["rows"]["0"]["DoNotUseEmail"]!=1) {
        echo ' <h2> OR Unsubscribe from all?</h2>
        <input type="checkbox" name="Unsibscribe_all" value="1"> Unsibscribe from all emails<br>';
    }
    echo '<input type="submit" value="Submit">
    </form>';
}//building form

Unsubscription channel request:

<?php
//$_POST['SubscriptionData']- array with all subscription preferances for current ContactID
//$_POST['CurrentSubscription'] - array with data to be subscribed
//$_POST['Defaultsubscriptions'] -array with default channels to add to subscriptions
//$_POST['defaultsubscriptionschannels'] - array with default channels
$contactId=$_GET['contactId'];
require_once( MODX_CORE_PATH . 'model/bpmintegration/bpm_bulk_subscriptionsFunctions.php');
BPMAuth();
if ($_POST['Subscribemeback']==1){
    $requestData1=ContactUnsubscribe($contactId,false);
    BPMQuery($requestData1,2);
    echo 'You were subscribed back';
}
if ($_POST['Unsibscribe_all']==1){
    $requestData1=ContactUnsubscribe($contactId,true);
    BPMQuery($requestData1,2);
    echo 'Unsubscribed from all';
    } // If Unsubscribed - post "Do no use email in BPM"
    else {
        echo '<h2>Subscription Channels were Updated</h2>';
        if (isset($_POST['CurrentSubscription'])){
            $filter=BuildIdFilter($_POST['CurrentSubscription']);
            $JsonSubscribe=BuildSubscribeJson($filter,true);// Json for Subscription Data
            BPMQuery($JsonSubscribe,2);
            $ToSetUnsubscribed=array_diff($_POST['SubscriptionData'],$_POST['CurrentSubscription']);//this is array to set unsubscribe status
            if (!empty($ToSetUnsubscribed)){
                 $filter=BuildIdFilter($ToSetUnsubscribed);
                 $JsonSubscribe=BuildSubscribeJson($filter,false);
                 BPMQuery($JsonSubscribe,2);
            }
        } 
        elseif(isset($_POST['SubscriptionData'])){
            $filter=BuildIdFilter($_POST['SubscriptionData']);
            $JsonSubscribe=BuildSubscribeJson($filter,false);
            BPMQuery($JsonSubscribe,2);//UpdateBPM
        }
        if (isset($_POST['defaultsubscriptionschannels'])){
            if (isset($_POST['defaultsubscriptions'])){
                $JsonSubscribe=JsonAddNewSubscriber($contactId,$_POST['defaultsubscriptions'],true);
                BPMQuery($JsonSubscribe,3);//UpdateBPM
                $ToAddUnsubscribed=array_diff($_POST['defaultsubscriptionschannels'],$_POST['defaultsubscriptions']);
                if (!empty($ToAddUnsubscribed)){
                    $JsonSubscribe=JsonAddNewSubscriber($contactId,$ToAddUnsubscribed,false);
                    BPMQuery($JsonSubscribe,3);//UpdateBPM
                    }
                }else{
                    $JsonSubscribe=JsonAddNewSubscriber($contactId,$_POST['defaultsubscriptionschannels'],false);
                    BPMQuery($JsonSubscribe,3);//UpdateBPM
                }
            }
        }// Defines array to add new subscription channels
?>

For additional assistance, see the video instruction at https://drive.google.com/file/d/1vJipUf0m04Mk_r3QLAakcwdXYtEon--J/view.

Like 2

Like

Share

0 comments
Show all comments

Hi,

I have bpmonline 7.13 on local dev system and need to configure Bulk email settings. By default below screen showing (screenshot)

Once I click on button "Check settings" than nothing is happening. I read the documentation but still confusing about this.

For a local dev system, from where we can get below required information like (API key, Bpmonline cloud services connection URL, Domain to receive responses, Auth key) to solve this issue.

Any help will be highly appreciable.

 

Regards

Like 0

Like

1 comments

Dear Muhammad,

You can obtain your API key and Auth Key from bpm'online support (support@bpmonline.com).

Best regards,

Angela

Show all comments

Hi,

I created a campaign, once i try to click on button "START CAMPAIGN" than below error message screen popups. I'm not sure about this issue.

Any help will be highly appreciable.

 

Regards

Like 0

Like

1 comments

Dear Muhammad, 

It seems like you need to set up your system bulk email settings. To resolve this issue, we need the following details:

1. We need your campaign error logs. Could you please find your campaign in the section and open the logs http://prntscr.com/muhmgz In the opened page, please add the new column 'Error details'  http://prntscr.com/muhngk  through the 'Select fields to display' option http://prntscr.com/muhngk

Once you have the error description column set up, please take a screenshot of it. 

2. We need to make sure you have your email validated. To check this, please go the emails section, choose actions and go to gulk email settings http://prntscr.com/muhvic Here, please take a screenshots of the General settings and Sender Domains tabs http://prntscr.com/muhvy5

Since the settings contain your particular environment data, it is better to take a closer look into the issue in therms of the technical support investigation. Therefore, once you take all the screenshots, please send them as well as the name of your instance to our support team via email at support@bpmonline.com We will help you to resolve it.

Best regards,

Dean

Show all comments