Below example shows how to incorporate eval into the code you already have. jettero's method to wrap the subroutine gives you the added benefit of trapping other errors as well. But if you are just concerned about not failing for bad domains the below code (untested) should work.
sub sendtextemail {
use MIME::Lite;
$from = "\"$from_name\" <$from_email>\n";
$sender = "\<$reply_1>\n";
$reply = "\"$from_name\" <$from_email>\n";
$to = "\"$fname\" <$email>\n";
$unsubscribe .="<$shortlink/r.cgi?s=$subid&a=$username&k=$valkey>\n";
use Net::SMTP;
MIME::Lite->send('smtp', 'localhost');
$mailmsg = MIME::Lite->new(
From => $from,
'Reply-to' => $reply,
Sender => $sender,
To => $to,
Subject => $subjectline,
Type => "text/plain; charset=iso-8859-1",
"X-Identifier:" => "$subid-$username\n",
"X-Ip:" => "$ip\n",
Data => "$message",
);
$mailmsg->add("Complaints-To" => "$emailabuse\n");
eval { $mailmsg->send; };
if ($@) {
print "[Error] Your email send errored: [$@]\n";
}
}