How could I send daily or weekly email in cron() function?
How are you generating your email?  It sounds to me like you need a custom module that implements hook_cron.  It would have to save the email address and send_interval to it's own table (or you'll have to build a query to select the email and interval from wherever you've stored it) in the database during hook_nodeapi with the update $op and/or the insert $op.  I recommend creating a 3rd column in your table with a date for the last time email was sent.  That way if cron gets interrupted it can continue where it left off.  Use a sql query to select all of the rows with column interval == daily and date &lt; NOW() and send emails out.  Then do the same if the date is a Sunday or whenever you want to send weekly emails for those.  As you process a row, update the date field to the current time which indicates the email was sent.

If you're not up for custom development, you may want to see if the notifications module suites your needs.