for my $to ( 'abc3\@gmail.com', 'abc2\@hotmail.com'){
When you use single quotes for literal strings, you don't want the
backslash before @ (the backslash will remain part of the
string).
my $from = "abc1\@gmail.com"; # double quotes
my $to = 'abc3\@gmail.com'; # single quotes
print "from: $from";
print "to: $to";
__END__
from: abc1@gmail.com
to: abc3\@gmail.com # !!
Those addresses are Email::Send::Gmail-internally being
extracted from the To/Cc/Bcc headers using Email::Address->parse(),
which doesn't identify something like abc3\@gmail.com as a valid
address, so the final list of recipients is empty — as the error
message is trying to tell you.
#!/usr/bin/perl -l
use Email::Address;
@addresses = Email::Address->parse('abc3@gmail.com');
print "ok : @addresses";
@addresses = Email::Address->parse('abc3\@gmail.com');
print "not ok : @addresses";
__END__
ok : abc3@gmail.com
not ok :