Project: Sparkpost for Speak To Me Catalog

to do  
#BulkEmail #smtp #newsletters #SparkPost 


(step 2)  Verifying that *I* own the domain and are responsible for email sent from that domain.   This can be done thought email to or via DKIM. 

Excellant instructions of how to change this DNS record at →

  #done → seth … wait for it wait for it
#dkim #DomainNames

Well it appears that my domain is blocked (blacklisted) … also getting error “Failed to generate message (1901)” when sending a test mail to postmaster.

Are you sure it is blacklisted? I just did a blacklist check on several tools and don’t see blacklisted. The only issue that is coming up is that it does not have any domain MX records set … which of course would explain the mail send failure.

yeah network solution made me go though a procedure to “move” their DNS system to a new thingey.  I did that so that i could set a TXT record in the MX records as per SparkPost’s instructions.   That did work.  but now is responding as if to a “construction page” which still over on networksolutions.  

so yeah, they probably trashed my DNS servers when i clicked for their dumb move. 

yep that is what happened.   anybody have the inmotion name servers laying around ?

The name servers for my “reseller” package are …  - IP Address: -  IP Address:

tag #inmotion #nameservers

seems that, according to network solutions help, the problem was created when i changed the DKIM record at network solutions, whereas it was supposed to be changed at inmotion … notwistanding that their own doc here says to do it the way i did it …    who knew null

anyway the name servers propogated and now all i need to do is change the DKIM record at inmotion.

okay i think i updated the DKIM record at inmotion

but SparkPost still has me as …

#shucks … tackle this tomorrow

Well, inmotion domain propagation is notoriously slow. When I did the validation for the move to GCP it took until the next day to become visible to google. They say it can take up to 48 hrs.

Also, wtf is the spch0217… to the left? That sure looks suspicious to me.

It as instructed by SparkHost →

Okay. I can see how that could work … just an odd way to do it.

nathan, what tool did you use to see the DNS records? and blacklisting?

Just google email blacklist check and use any. I tried several with about the same results.

#thanks → nathan

unfortunately that sensing of the world confirms my original suspicions


if i remember correctly this blacklisting was why i started using to send out the newsletters.  that happened several years ago.

Well, I used the very same Mx toolbox with exactly (and even copied and pasted it to be sure) yesterday and it was not blacklisted at all, there, or anywhere else.

Clearly your experience is being generated differently than mine :)

well you may well have tried it when the MX record had been screwed up and you ended up retrieving that “under construction” dummy website … which would not have been blacklisted.

… er, relative  #TimeingIsKing indeed !

Anyway i predict that your experience today will show is on a #BlackList.

Well see, that’s the thing. Humans are in this habit cycle where they think they need to sync up their experiences in order to co-exist. But in fact they don’t. Every person already exists inside their own entire and self contained experience. Syncing up on some nice juicy things is really good … but syncing up on bad things is rarely of any value at all. 

Like when a girl is cleaning her closet and picks up and smells a shirt and goes “oh, that really stinks bad!”, then hands it to her girlfriend, who smells it and says “oh yea, that is really bad!”. People do this all the time about everything. It is simply not necessary at all, except in a few small details here and there that support the desired joint story (more of course when doing something like making love).

I had my nice experience. I have no desire to have your experience of seeing your domain black listed. I don’t need to. Even if I were were working directly with you, I would not need to. All that needs to happen is for you to replace your thinking with thinking about the experience you want and then we will both be having that experience … far easier than both of us having to sync up with the bad experience and then, in each our own way, create the desired experience in our respective realities. That is why fixing things traditionally takes a lot of work … it doesn’t have to.  

well i am intending to send out the Speak To Me  #newsletters.
These thoughts are necessary for that purpose … especially those in #BlackList.  

#thanks → nathan for your contribution leading to more facts about the process.

Now my energies are best spent acting in compliance with those facts, rather than wishing them away.

Yep, that’s true. Wishing things away never does or did anything.  

However, doing a grid, or even #hooponopono, would do wonders and speed your process up to maybe only a few minutes compared to maybe hours by dragging your energy vibration and thoughts along until your facts and energy align with what you desire by “doing things first”.

Energy alignment first, then what is left to do is trivial, often quite fun, and sometimes even nothing at all.  

But no wishing. You are right about that. It is wasted effort if it does not actually change your state of being.

#shuck a #hooponopono sure sounds like more just #thinking … me, i am ready to act now … er, sans this distraction which has just to do with our human bonding … or rather not bonding. 



Setting up a Request Adapter

Because of dependency collision, we have opted to use a request adapter rather than requiring a request library. This means that your application will need to pass in a request adapter to the constructor of the SparkPost Library. We use the HTTPlug in SparkPost. Please visit their repo for a list of supported clients and adapters. If you don’t currently use a request library, you will need to require one and create a client from it and pass it along. The example below uses the GuzzleHttp Client Library.

A Client can be setup like so:

require ’vendor/autoload.php’;

use SparkPost\SparkPost;
use GuzzleHttp\Client;
use Http\Adapter\Guzzle6\Client as GuzzleAdapter;

$httpClient = new GuzzleAdapter(new Client());
$sparky = new SparkPost($httpClient, [’key’=>’YOUR_API_KEY’]);

okay … in the mac terminal 
this is where i need to be able to git and install the release of the software on speaktomecatalog …
Last login: Thu Feb 16 22:35:53 on console
Seths-Mac-mini:~ sethrussell$ ssh -p 2222
Last login: Wed Feb 15 10:38:22 2017 from
[speakt5@res216 ~]$ cd public_html/db
[speakt5@res216 db]$ git clone
Cloning into ’test’...
Warning: Permanently added the RSA host key for IP address ’’ to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
[speakt5@res216 db]$

nathan, i am stuck here … if there is a password for this repository, why does it not ask for it?

My test repository is in fact here: … if you go there it will require our user name and password for our respsitory.  hmmm … is there is a way to embed that in the git ?

This is some weirdness in how you have been setting up your apple public keys on your apple keychain. I have seen it a few times before, but not having it right now.

You can simply use the http url instead. Where you get the url from at bitbucket it gives you the option to use a http url instead of a git url. You can also encode the password right in the http url normally if you use it a lot.

 git clone https://…...


Here is the http test url:

git clone


yeah that worked, #thanks 

problem that installed the test.git on my local mac … i need to intstall it on the speak server.

hmmm … oh maybe i need to issue the command that will navigate me to speak … then do the https get … ill try that ….

er, #shucks … how do i do that?

omg i think i did it … now just got to wrap myself around what it actually did null

so this works …  …. hmmm … okay … now got to learn how these repositories work

Yep. That’s it. You are simply opening a terminal on the speak server, moving to the correct folder, and unpacking the software there. That’s the normal sequence for a git install.

… and #BTW just #FYI … once you ssh’d to your remote server you probably could have used either the git:// or the https:// repository url equally because remote servers do not have automatic keychains. I had no idea you were not wanting the software on your local machine.

The git:// url’s try and use the mac keychain locally, so you don’t have to keep entering the password, but you already have a speaktome keychain key being used by your ssh connection login, and so that one is getting confused and used for the git:// commands on your local mac as well, so it doesn’t work.

You could set up separate keys locally for each, but I don’t have that on the top of my head, would have to google it, and it is painful to do … I just use the https:// repository url’s when I run into such things.

thanks … i am figureing all of this out … i need to be able to move in this world easily and learning this is part of that.

remembering command line terms and terse syntaxes is not my forte … bit i am quite confident at knowing what needs to be done and clicking to do it.    have you any experiences with GUIs for git … like maybe this one ?  Can something like that be installed in our #GCP ?  … or woud it help at speaktomecatalog? … or is it something that works anywhere and needs to be installed on my mac?

No. GUI’s cannot be installed on servers. Servers are simply command line only. Even though there are a few web based gui’s out there for git and a few things, I have tried them and they very hard to install and get to work reliably and are not how all the documentation is skewed. All the doc for all this stuff is based on command line use.

But you don’t have to remember these commands. I don’t, and couldn’t either. I just google them when I need them. They are so easy to google. And if I used the same multiple command a lot, I just create a batch file for it. I even forget how to create batch files in linux often, so I google that too when I need it.

Really, all this server shell stuff is so easy to google and is so well documented out there, especially at stackoverflow which is the google result I choose first. That is how I do everything all the time all day. Google and do. No memory required.  

The only trick is knowing how to compose a google search to get you right to what you are looking for, but that’s just a little learning process, then google and do is often even easier than gui based tools.

yeah okay that’s what i have been doing for a long time now.  am trying to move in a world here which has apparently yet to be designed for my legs to run in … so guess i will just keep crawling through the brambels.  #shucks 

Well, IMHO it is not your legs, it is simply that you have a resistance to the command line you have been carrying since a long time ago when things like “google and do” were not available and people had to be nerds and have great memory to effectively use the command line.

Now, everyone uses the command line and hardly anyone has much idea how it works at all … because google and do works great. I have seen you, at times, struggle with GUI ways to do things that literally took you 10 or more times longer to get the job done using point and click than you could have done with a simple google copy paste do, without having any idea what the commands were.

It is your long standing story that your legs are not made for the command line … not reality. You could update your story, use #hooponopono to clean your resistance, and be a command line master in moments.  

… reality works much different today. It is much faster and more mutable than it was 40 years ago. And there are great tools for managing it available today. Reality can be a much easier and faster and more tuned in experience today, even for an old goat.  

well i know when i am crawling when i need to be running.  obviously i need to learn some stuff.  thanks for your help.

Just remember, all the best learning AND change happens in state of being, not circumstances, not knowledge. Put the effort into changing your state of being first, and the rest will fall into place cleanly and effortlessly.   

Trust it, it works!

i got my test respository cloned now in 3 different places … at bitbucket, locally, at speak.  i put a hello.php file in the bitbucket repository, but it did not get into the other ones.  maybe i needed to committ it in the bitbucket repository … i am guessing.

Yes. Add AND Commit are always required to get new files in.

I am not sure what you mean by “put in the bitbucket repository” though. It is possible to upload files through the bitbucket GUI, but that is probably the worst way to do things.

Best way is to add the file locally. Use git add then git commit to get it into the repo, then git push it to bitbucket. That is the normal work flow and works super cleanly and prevents collisions and info loss.

yeah i need to learn the basic transactions between repositories

it seems i have a local gui running … that may help null

The normal work flow I do when making changes to the #TD source is.
  1. Modify a file locally (usually using netbeans)
  2. Command line git add . (only if it is a new file)
  3. Command line git commit -am ‘what I did’
  4. Command line git push
  5. Then on the server do git pull
  6. The change is integrated into the sever code with only the parts of the files that actually changed being transferred (thus very efficient).
On both the local and the server attention (cd) must be upon the root of the repo.

what is “master” … in the case of TD’s ? …. in the case of my app that i want to install at ?

Eh, who knows. Quite frankly I don’t really know or care. I just do what “google and do” tells me to. Generally master is only needed when doing offbeat things, not normal workflow like above if your repo is set up normally via a get clone.

In the above work flow, I have 2 teminal “tabs” open, one local, one remote, and since the commands I just typed are in the history buffers, once done the first time, I just use the arrow keys to reexecute the above commands as needed. It is super quick and easy … faster even that would be in a gui.

yeah i did it that way when i was using a local mirror and ftp to transmit.  that was simple and worked fine … but i guess just for one developer at a time.   now we are getting into multiple developers and snaying packages together from whever on the web and knitting them together so they work at some site.  apparently that is the new normal. 

require ’vendor/autoload.php’;
use SparkPost\SparkPost;
use GuzzleHttp\Client;
use Http\Adapter\Guzzle6\Client as GuzzleAdapter;

installing these resources in the right place at so that i can call the SparkPost api is the question at hand.


Seth:  qick question … some of the components of SparkPost look like they require php >=5.4 … yet the current version at speak is 5.2.17
Seth:  do you know for a fact that there would be a big problem in just updating the weisite?
Miami:  Yep. That’s a pretty big problem. There are huge differences between those. If you upgrade speak to 5.4 lots of things will probably break because you relied on quite a few of the discontinued things in your programming style of the early 00’s
Seth:  ok thanks
Miami:  I nearly have TD software up to 5.6 now, just a few more things to fix, but that was quite a job.
Seth:  i see
Seth:  i guess that was bad news … but maybe the good news is i need to install the mailer in the cloud instead of a
Seth:  how about that?
Miami:  Sure. GCP is 5.6 by default.
Miami:  Better to install as an app than as a compute engine. Then it won’t accrue any cost when not in use.
Seth:  okay

see “A mailer in the Cloud

Some SparkPost documentation to note …