What is the 'working directory' when cron executes a job?

Add cd /home/xxxx/Documents/Scripts/ if you want your job to run in that directory. There's no reason why cron would change to that particular directory. Cron runs your commands in your home directory.

As for ssmtp, it might not be in your default PATH. Cron's default path is implementation-dependent, so check your man page, but in all likelihood ssmtp is in /usr/sbin which is not in your default PATH, only root's.

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
15 7 * * * cd /home/xxxx/Documents/Scripts && ./email_ip_script.sh

If your cronjob is a bash script, the following will CD to the location of your script (assuming that you're using absolute path in your cron definition):

cd "$(dirname "$0")";

To answer question 1: if you run crontab -e as your own user the jobs will be scheduled in that user's crontab and will thus run with the permissions of that user.

But you need to consider that the jobs will run in a non-interactive shell meaning that the $PATH might be different from the one you have when running the script from the command line.

It is best to always use full paths in scripts, especially if you plan to schedule them via at/cron etc.

I would also recommend using full paths to all files to avoid exactly the problems you see.

To prevent race conditions and other security issues you should also use mktemp to make sure the file you read is not modified by anything outside your script.

So I'd change the script to something like:

vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`"
echo "$vIP_ADDR"
mail_msg=`/bin/mktemp`
/bin/sed "s/IPADDR/$vIP_ADDR/g" /home/xxxx/Documents/Scripts/template.txt > $mailmsg
/path/to/ssmtp [email protected] < $mailmsg
/bin/rm $mailmsg