Try taking a look in your database at the groups table it will show you what id your newsletter group is.
Your "Page not found" error is, Im guessing, because i was redirecting everyone who was not a member to my signup page, which you don't have, see this line:
return Director::redirect($this->Link("/sign-up/?s=1&e=" . $email));
You should be able to just add them to your newsletter group if you don't want them to have to become a member first.
try this or something like it instead:
function doSubscribeForm($data, $form){
$email = Convert::raw2sql($data['Email']); // prevent sql injection
//check if newsletter exists first
if($newsletter_group = DataObject::get_one('Group', "ID = 4")):
if($existing_member = DataObject::get_one("Member", "Email = '$email'")):
$member = $this->CurrentMember();
//If current member matches the existing member.
if($member->ID == $existing_member->ID):
$existing_member->Groups()->add($newsletter_group);
else:
return Director::redirect(Director::BaseURL() . 'Security/login');
endif;
return Director::redirectBack();
else:
//create new member and add them to newsletter group
$member = new Member();
$form->saveInto($member);
$member->write();
$member->Groups()->add($newsletter_group);
endif;
endif;
return Director::redirectBack();
}