Mail forwarding blocked by SPF

Some time ago I moved away from Yahoo mail to my own hosted address, and used the forwarding function to pass through any residual mail. This worked fine for several years, but now my host has implemented strict SPF control and a lot of the forwarded mails get rejected.

Unfortunately Yahoo doesn’t give any sophisticated options to handle this, eg. there are a number of options they could have implemented for forwarding from the Yahoo address without looking like it’s spam:

  • normal forwarding, or as an attachment
  • putting the sender in the Reply-To header
  • or even a line of text saying who the original sender was

The only way I found to get around this was to stop the forwarding, and use a PHP script to periodically check my Yahoo account via POP and move the mail to my new IMAP account. This actually works fine, so in case it’s of use to others here is the script I use:

<html><body><pre>
<?php 

docopy("{pop.mail.yahoo.com:995/pop3/ssl}INBOX","Yahoo email","Yahoo password",
       "{Target imap:143}INBOX", "Target login", "Target password");

function docopy($smailbox, $suser, $spwd, $tmailbox, $tuser, $tpwd) {
  echo "--------------------\nCopying mail from $smailbox:$suser to $tmailbox:$tuser\n--------------------\n";

  if (!($source = imap_open($smailbox, $suser, $spwd))) {
    echo "Connect to source failed";
    exit(1);
  }

  echo "Connected source: $source\n";

  $msgcount = imap_num_msg($source);

  if ($msgcount == 0) {
    echo "No messages to process\n\n";
    imap_close($source);
    return;
  }

  echo "Messages: $msgcount\n";

  if (!($target = imap_open($tmailbox, $tuser, $tpwd))) {
    echo "Connect to target failed";
    imap_close($source);
    exit(1);
  }

  echo "Connected target: $target\n";

  for ($msg = 1; $msg <= $msgcount; $msg++) {
    echo "\nProcessing message $msg\n";

    $header = imap_fetchheader($source, $msg);
    $body = imap_body($source, $msg);

    if (!imap_append($target, $tmailbox, $header . $body)) {
      echo "Saving message failed";
      imap_close($source);
      imap_close($target);
      exit(1);
    }

    echo "Message saved\n";

    if (!imap_delete($source, $msg)) {
      echo "Deleting message failed";
      imap_close($source);
      imap_close($target);
      exit(1);
    }

    echo "Message deleted\n";
  }

  imap_expunge($source);

  imap_close($source);
  imap_close($target);

  echo "Completed copy\n\n";
}
?>
</pre></body></html>

Obviously you have to fill in the bits for Yahoo email, Yahoo password, Target imap etc. It should also work for other POP or IMAP sources/targets, but I haven’t tried it.

The function can be called several times if you have more than one account to copy, in my case two works fine.

It’s written to give some level of output if you run it through a web server, then once it’s working you can schedule it to run every few minutes via cron or similar.

App “upgrade” = Ransomware ?

I’ve been a user of SplashID password manager on my iPhone, iPad and Windows machine for a couple of years and found it pretty good. I paid $10 to use wifi sync which seemed reasonable value at the time.

Now, the developer has created an “upgraded” version which requires a $20 annual fee to use wifi sync. Of course they can offer this service and maybe some people will buy it, but I’m happy with my version thanks.

BUT – the version on my iDevices is linked to the App Store, and will automatically update if I enable this option or if I ever click the “Update All” button; there’s no easy way to stop this, and thus at some point my paid for functionality will inevitably be deleted by the developer.

In my view this is ransomware (or possibly theft). The developer almost certainly doesn’t intend it this way, but as a consumer I don’t care what their theory is, I care what I can use and what it costs me. When I buy something I don’t expect free upgrades, although they are often included, but I do expect it to not be remotely disabled and an additional fee demanded.

Of course there is a very simple solution – leave the application on the App Store and create a new one explicitely as “Version X”. If the old one breaks with an iOS update then fair enough, I didn’t buy perpetual support, but in the meantime don’t steal my functionality.

Posts on the SplashData forum received suggestions to use their permanent upgrade offer – so basically ransomware in email form rather than as an in-app purchase.

I also raised this with Apple but haven’t heard back yet.

iPhone 6

So I now have an iPhone 6 – after sticking with my old iPhone 4S for three years the new 6 offered enough difference to be worth the upgrade.

The migration was trivial and took less than one hour, with all the apps still apparently working and nothing more than a few logins to reset.

For the phone, the highlight is obviously the bigger screen. I didn’t really think the 4S was small, but wow the 6 is just so much better in that department, with even more clarity and so much more text visible. Reading news or looking at photos is a vastly improved experience, and I didn’t even feel it was a problem before.

In terms of the hardware, it feels solid, and the (optional) leather case is very nice to hold. Camera is significantly more responsive, and the fingerprint ID works pretty well. The size is OK, obviously a lot bigger but not so much it feels inappropriate for a phone.

The only thing I’ve noticed is that quite a lot of apps are obviously not yet adjusted for the new resolution, so the graphics feel blown up and a bit bold. It’s a bit like using the 2x view of an iPhone app on the iPad but not as bad.

Update 17 Oct

The Belkin Charge+Sync Dock works with the iPhone 6 with the leather case on. I think without the case the phone would be too thin and lean back uncomfortably far.