Use a different set of delimiters to mark your sections something that cannot occur in real live data, as opposed to using "@" for a delimiter.
Have strict rules about what can be between "@", for example: allow just letters. That way you can safely distinguish between an email address and a marked section, as both parts of an email address will most likely either contain non-word characters, or you write at least one non-letter character right right next to it, you probably won't ever write an email address touching another word.
Find a way to escape the "@" character, for example "\@" could represent a "@", but then you need to escape the backslash too: "\\". Or, and this is possibly simpler: let "@@" represent a single "@". Ooh, I like that.
Whether this is sufficient depends on whether the string it matches and replaces, must be able to contain a '@'. Well, you can write strings like "blah blah @foo@@@@bar@ blah" where both "foo" and "bar will get the special treatment, and the "@@" in the middle of the quadruple will be replaced by a single "@". I guess that will probably suffice.