Writing a custom Rules Action for VBO- do I need to use Entity? I have a list of email addresses displayed in a view. I'd like to parse those email addresses using a rules action, via VBO.

I'm trying to pass the email address to my rules action as a parameter, but it seems the only way I can do this is if I declare the email address as an entity first. Is that right or am I missing something? If there's an easier way, please let me know.
[I'm assuming you have a custom table to store these email addresses and are not related to any other entity]
With the latest version of VBO, yes, you have to define an Entity. 
See this issue in the VBO queue for more information. 

FYI, the below steps worked for me. 

function module_entity_info() {
  return array(
    'MY_NEW_ENTITY_TYPE' =&gt; array(
      'label' =&gt; t('MY_NEW_ENTITY_TYPE'),
      'base table' =&gt; 'MY_NEW_TABLE',
      'entity keys' =&gt; array(
        'id' =&gt; 'your_tables_primary_key',
      ),
    ),
  );
}


Note that in entity keys array, set the table's column as the key, and VBO will pick it up and will pass as an object to the action. See below:

function module_action_info() {
  return array(
    'module_remove_something' =&gt; array(
      'type' =&gt; 'MY_NEW_ENTITY_TYPE',
      'label' =&gt; 'Remove URL',
      'configurable' =&gt; FALSE,
      'behavior' =&gt; array('deletes_property'),
    ),
  );
}


In your views integration file, you will probably need to define the tables as an entity too. 

function mymodule_views_data() {
  $data['mymodule_emails'] = array(
    'table' =&gt; array(
      'base' =&gt; array(
        'field' =&gt; 'eeid',
        'title' =&gt; 'Extracted E-mails',
        'help' =&gt; 'Email addresses collected by parsing the remote URL',
      ),
      'group' =&gt; 'E-mail',
      'defaults' =&gt; array(
        'field' =&gt; 'email',
      ),
      'entity type' =&gt; 'MY_NEW_ENTITY_TYPE', // attention here!
    ),
   // Rest of the table definition...