I found a solution. I created a custom "Send an Email" apex page there a user can choose any of opportunity attachment and send it via email, for this functionality I have created an apex controller that can send an email with the  attachments.

Here is my solution, note the code is not refactored but functionality is doing what I need exactly,

**Apex page:**

    <apex:page controller="EmailOpportunityAttachment">
        
    <script type="text/javascript">
    
    var delim = ";";
    function lookupPick2(editPage, p2_lkid, p2, contactId, contactName, cas4, accountName, cas4_lkid, accountId, h){
        document.getElementsByClassName('p2')[0].value = contactName;
        document.getElementById('p2_lkid').value = contactId;
        closePopup();
    }
    function pickupValue(additionalToValue, ccValue, bccValue) {
        //var editPage = document.getElementsByClassName('editPage')[0];
        var p24 = document.getElementsByClassName('p24')[0];
        var p4 = document.getElementsByClassName('p4')[0];
        var p5 = document.getElementsByClassName('p5')[0];
        if(additionalToValue != '') {
            if (p24.value != '') {
                p24.value += delim;
            }
            p24.value += additionalToValue;
        }
        if(ccValue != '') {
            if (p4.value != '') {
                p4.value += delim;
            }
            p4.value += ccValue;
        }
        if(bccValue != '') {
            if (p5.value != '') {
               p5.value += delim;
            }
            p5.value += bccValue;
        }
        closePopup();
    }
    
    function openDocumentUpload(e) {
       setLastMousePosition(e);
       openPopup('/widg/filepicker_fs.jsp?lktp=015&mode=1&eid=00Yg0000000aN7g&utype=00P&omode=1&otype=2', 'doc', 450, 450, 'width=450,height=450,scrollbars=yes,toolbar=no,status=no,directories=no,menubar=no,resizable=1', true);
    }
        
    function attachPhxAttachment(e){
        var selector = document.getElementById('attS');
        var splt = selector.value.split('##');
        var id = splt[0];
        var size = splt[1];
        var tr = document.getElementById('tr_' + id);
        var fileStr = document.getElementById('fileStr');
        fileStr.innerHTML += tr.outerHTML;
        populateAttIds();
    }
        
    function populateAttIds(){    
        var hiddenDv = document.getElementsByClassName('attDvBlock')[0];
        var hiddenAttIds = hiddenDv.getElementsByClassName('hiddenAttIds');
        var inps = document.getElementsByClassName('attIds')[0];
        
        inps.value = '';   
        if(hiddenAttIds && hiddenAttIds.length > 0){
            for(var i=0; i < hiddenAttIds.length; i++){
                inps.value += hiddenAttIds[i].value + delim;
            }
        }
    }    
    
    function submitFormNoSave() {
        var nosave = document.getElementById('nosave');
        var save = document.getElementById('save');
        nosave.value = '1';
        save.value = 'nosave';
        submitForm();
    }
        
    function submitForm() {
        var editPage = document.getElementById('editPage');
        editPage.submit();
    }
        
        function deletePhxAttachment(event) {
            if (window.confirm('Are you sure?')) {
                var elem = event.target.parentNode.parentNode;
                elem.parentNode.removeChild(elem);
                populateAttIds();
            }
        }
    </script>

    
        <apex:sectionHeader title="Task" subtitle="Send an Email"/>
    
        <apex:form id="editPage" onsubmit="if (window.ffInAlert) { return false; }" styleClass="editPage">
     
            <input type="hidden" name="cancelURL" id="cancelURL" value="/{!opptyId}" />
            <input type="hidden" name="id" id="id" value="00Yg0000000aN7g" />
            <input type="hidden" name="docancel" id="docancel" value="0" />
            <input type="hidden" name="new_template" id="new_template" value="0" />
            <input type="hidden" name="nosave" id="nosave" value="0" />
            <input type="hidden" name="save" id="save" value="0" />
            <input type="hidden" name="retURL" id="retURL" value="/{!opptyId}" />
            <input type="hidden" name="rtype" id="rtype" value="003" />
            <input type="hidden" name="p2_lktp" id="p2_lktp" value="003" />
            <input type="hidden" name="p2_lkold" id="p2_lkold" value="" />
            <input type="hidden" name="p2_lkid" id="p2_lkid" value="" />
            <input type="hidden" name="p2_lspf" id="p2_lspf" value="0" />
            <input type="hidden" name="p2_lspfsub" id="p2_lspfsub" value="0" />
            <input type="hidden" name="p2_mod" id="p2_mod" value="0" />
            <input type="hidden" name="template_id" id="template_id" value="000000000000000" />
            
            <apex:pageblock id="mail" mode="edit"> 
                <apex:pageBlockButtons >                
                    <apex:commandButton value="Send" action="{!sendEmail}" id="sendEmailBtn" />
                    <input type="button" class="btn" value="Select Template" id="sendEmailBtn" />
                    <input value="Attach File" class="btn" title="Attach File (New Window)" name="attach" onclick="openDocumentUpload(event)" type="button" />
                    <input type="button" class="btn" value="Check Spelling" id="sendEmailBtn" />
                    <input type="button" class="btn" value="Cancel" id="cancelBtn" />
                </apex:pageBlockButtons>
                
                <apex:pageblockSection>
                    <apex:outputText styleClass="err" value="{!errorMsg}"/> 
                    <apex:outputText styleClass="success" value="{!successMsg}"/> 
                </apex:pageblockSection>
                
                <apex:pageblockSection columns="1" title="Edit Email">
                
                    <apex:pageBlockSectionItem >
                        <apex:outputLabel value="From" styleClass="bld"/>
                        <apex:outputpanel layout="block" styleClass="requiredInput">
                            <apex:outputpanel layout="block" styleClass="requiredBlock" />
                            <apex:selectList id="p26" value="{!ffrom}" size="1">
                                <apex:selectOptions value="{!contacts}"></apex:selectOptions>
                             </apex:selectList>
                        </apex:outputpanel>
                    </apex:pageBlockSectionItem>
    
                    <apex:pageBlockSectionItem>
                        <apex:outputLabel value="To:" styleClass="bld"/>
                        <apex:pageBlockSectionItem>
                        <apex:inputText  value="{!to}" maxlength="255" onchange="getElementByIdCS('p2_lkid').value='';getElementByIdCS('p2_mod').value='1';" size="20" styleClass="p2" />
                        <a href="javascript: openLookup('/_ui/common/data/LookupPage?lkfm=editPage&lknm=p2&lktp=' + getElementByIdCS('p2_lktp').value,670,'1','&lksrch=' + escapeUTF(getElementsByClassName('p2')[0].value.substring(0, 80)))" id="p2_lkwgt" onclick="setLastMousePosition(event)" title="To Lookup (New Window)">
                        <img src="/s.gif" alt="To Lookup (New Window)" class="lookupIconOn" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="To Lookup (New Window)" /></a>
                    	</apex:pageBlockSectionItem>
                    </apex:pageBlockSectionItem>
                    
                    <apex:pageblockSectionItem>
                        <apex:outputLabel value="Related To" styleClass="bld"/>
                        <apex:pageblockSectionItem>
                            <apex:selectList size="1" style="width: 250px">
                                <apex:selectOptions value="{!relatedTo}"></apex:selectOptions>
                                <apex:selectOptions value="{!relatedTo}"></apex:selectOptions>
                                <apex:selectOptions value="{!relatedTo}"></apex:selectOptions>
                             </apex:selectList>
                             <apex:inputText maxlength="255" style="margin-left: 4px;" value="{!relatedTo}" />
                        </apex:pageblockSectionItem>
                        
                    </apex:pageblockSectionItem>
               
                    <apex:pageblockSectionItem >
                        <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p24_lkwgt" onclick="setLastMousePosition(event)" title="Additional To Lookup (New Window)">Aditional To:</apex:outputlink>
                        <apex:pageBlockSectionItem >
                            <apex:inputTextArea value="{!additionalTo}" cols="62" rows="2" styleClass="p24" />
                            <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p24_lkwgt" onclick="setLastMousePosition(event)" title="Additional To Lookup (New Window)">
                                 <img src="/s.gif" alt="Additional To Lookup (New Window)" class="lookupIcon" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="Additional To Lookup (New Window)" />
                            </apex:outputlink>
                        </apex:pageBlockSectionItem>
                    </apex:pageblockSectionItem>            
                    
                    <apex:pageblockSectionItem >
                        <apex:outputlink value="#" target="_blank">CC:</apex:outputlink>
                        <apex:pageBlockSectionItem >  
                            <apex:inputTextArea value="{!cc}" cols="62" id="p4" rows="2" title="CC" styleClass="p4" />              
                            <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p4_lkwgt" onclick="setLastMousePosition(event)" title="CC Lookup (New Window)">
                                <img src="/s.gif" alt="CC Lookup (New Window)" class="lookupIcon" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="CC Lookup (New Window)" />
                            </apex:outputlink>
                        </apex:pageBlockSectionItem>
                    </apex:pageblockSectionItem>
                   
                    <apex:pageBlockSectionItem >
                        <apex:outputlink value="#" target="_blank">BCC:</apex:outputlink>
                        <apex:pageBlockSectionItem>
                            <apex:inputTextArea value="{!bcc}" cols="62" id="p5" rows="2" title="BCC" styleClass="p5" />                
                            <apex:outputlink value="javascript: openPopup('/_ui/core/email/author/EmailCCBccLookup?id={!opptyId}', 'CCBCCLookup', 420, 490, 'width=420,height=490,toolbar=no,status=no,directories=no,menubar=no,resizable=yes,scrollable=no', true);" id="p5_lkwgt" onclick="setLastMousePosition(event)" title="BCC Lookup (New Window)">
                                <img src="/s.gif" alt="BCC Lookup (New Window)" class="lookupIcon" onblur="this.className = 'lookupIcon';" onfocus="this.className = 'lookupIconOn';" onmouseout="this.className = 'lookupIcon';this.className = 'lookupIcon';" onmouseover="this.className = 'lookupIconOn';this.className = 'lookupIconOn';" title="BCC Lookup (New Window)" />
                            </apex:outputlink>
                        </apex:pageBlockSectionItem>
                    </apex:pageBlockSectionItem>
                    
                    <apex:pageblockSectionItem >
                        <apex:outputLabel value="Subject" styleClass="bld"/>
                        <apex:outputpanel layout="block" styleClass="requiredInput">
                            <apex:outputpanel layout="block" styleClass="requiredBlock"/>
                            <apex:inputText value="{!subject}" maxlength="100" size="70"/>
                        </apex:outputpanel>    
                    </apex:pageblockSectionItem>
                    
                    <apex:pageblockSectionItem >
                        <apex:outputLabel value="Message" styleClass="bld"/>
                        <apex:inputTextArea value="{!message}" rows="15" cols="93" richText="false"/>
                    </apex:pageblockSectionItem>
                    
                </apex:pageblockSection>
                
                <div id="test" style="width: 500px; margin: 20px 0 0 19%;">
                    <select id="attS" name="attS" style="width: 400px;">
                        <apex:repeat value="{!attachments}" var="att" id="theRepeat">
                            <option value="{!att.Id}##{!att.BodyLength}">{!att.Name}</option>
                        </apex:repeat>
                    </select>
                   <input value="Attach File" class="btn" id="attachFile" name="attachFile" onclick="attachPhxAttachment(event)" type="button" />
                   <div style="margin: 10px 0 0 0;">
                       <input style="display:none;" value="Attach File" class="btn" title="Attach File (New Window)" id="attach" name="attach" onclick="openDocumentUpload(event)" type="button" />
                   </div>
               </div>
            </apex:pageblock> 
    
        
    
    <div class="bRelatedList">
    <!-- Begin ListElement -->
    
    <!-- motif: Home -->
    
    <!-- WrappingClass -->
    <div class="listRelatedObject homeBlock">
        <div class="bPageBlock brandSecondaryBrd secondaryPalette">
            <div class="pbHeader">
                <table border="0" cellpadding="0" cellspacing="0"><tbody>
                    <tr>
                        <td class="pbTitle">
                            <img src="/s.gif" alt="" width="12" height="1" class="minWidth" title="" style="margin-right: 0.25em;margin-right: 0.25em;margin-right: 0.25em;margin-right: 0.25em;margin-right: 0.25em;" />
                            <h3>Attachments</h3>
                        </td>
                        <td class="pbButton">
                            <input value="Attach File" class="btn" name="attach" onclick="openDocumentUpload(event)" title="Attach File (New Window)" type="button" />
                        </td>
                        <td class="pbHelp">&nbsp;</td>
                    </tr>
                    </tbody>
                </table>
            </div>
            <div class="pbBody attDvBlock">
                <table class="list" border="0" cellspacing="0" cellpadding="0">
                    <tbody id="fileStr">
                    <tr class="headerRow">
                        <th class="actionColumn" scope="col">Action</th>
                        <th scope="col" class=" zen-deemphasize">File</th>
                        <th scope="col" class=" zen-deemphasize">Size</th>
                    </tr>
                    </tbody>
                </table>
            </div>
            <div class="pbFooter secondaryPalette">
                <div class="bg"></div>
            </div>
        </div>
    </div>
                <div class="listElementBottomNav"></div>
                    <!-- End ListElement -->
    </div>
            
            <div class="hiddenDv" style="display:none !important;"> 
                <table class="list" border="0" cellspacing="0" cellpadding="0">
                    <tbody>
                    <apex:repeat value="{!attachments}" var="att2" id="trFileRepeat">                
                        <tr id="tr_{!att2.Id}" class="dataRow even last first highlight" onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" onmouseout="if (window.hiOff){hiOff(this);}" onmouseover="if (window.hiOn){hiOn(this);}">
                            <td class="actionColumn">
                                <a href="javascript:;" class="actionLink" onclick="deletePhxAttachment(event)">Del</a>
                            </td>
                            <th scope="row" class=" dataCell  ">
                                <a href="/servlet/servlet.FileDownload?file={!att2.Id}" target="_TOP">{!att2.Name}</a>
                                <input type="hidden" value="{!att2.Id}" class="hiddenAttIds" />
                            </th>
                            <td class=" dataCell  ">{!att2.BodyLength} bytes</td>
                        </tr> 
                    </apex:repeat>
                    </tbody>
                </table>
            </div>
            <apex:inputText value="{!attachmentIds}" styleClass="attIds" style="" />
        </apex:form>
     </apex:page>

**Apex controller:**
    
    public class EmailOpportunityAttachment{
    
     	public String to {get;set;}
        public String additionalTo {get;set;}
        public String relatedTo {get;set;}
        public String cc {get;set;}
        public String bcc {get;set;}
        public String ffrom {get;set;}
        public String message {get;set;}
        public String subject {get;set;}
        public String errorMsg{get;set;} 
        public String successMsg{get;set;}
        public List<String> addresses {get;set;}
        public String opptyId {get;set;}
        public String accountId {get;set;}
        public String attachmentIds {get;set;}
        public boolean flagToSendMail;
        private static final String DEL = ';';
            
      
        public EmailOpportunityAttachment(){
            this.opptyId = ApexPages.currentPage().getParameters().get('opptyId');
            this.accountId = ApexPages.currentPage().getParameters().get('accountId');
        }
    
        public List<SelectOption> contacts {
            get {
                List<SelectOption> contacts = new List<SelectOption>();
                List<Contact> cnts = [select Id, Name, Email from Contact where Account.Id =: this.accountid];
                for (Contact cnt: cnts) {
                    contacts.add(new SelectOption(cnt.Id, '"' + cnt.Name + '" <' + cnt.Email + '>'));
                }
            return contacts;
            }
            set;
        }
    
        
        public Attachment[] getAttachments(){
          return  [select id, Name, BodyLength, Body from Attachment where parent.id =: this.opptyId];
        }
        
        public List<Attachment> getAttachmentsByIds(final String[] ids){
            String sql = ' select Id, Name, Body, ContentType from Attachment where Name=\'DDDDDDDDDDDDDD\' ';
            boolean found = false;
            if(null != ids && ids.size() > 0){
                for(String id: ids){
                 	sql += ' OR Id=';
                    sql += '\'';
                    sql += id;
                    sql += '\'';
                }            
                found = true;
            }
            //System.debug(sql);
            return found ? (List<Attachment>)Database.query(sql) : null;
        }
        
        
        public String getEmailByUserName(final String userName){
          return [select Email from Contact where Name =: userName limit 1].Email;
        }
    
        public PageReference sendEmail() {
            PageReference pageRef = new PageReference('/'+this.opptyId);
                    
            if(subject == '' || message == ''){
                errorMsg = 'Please enter subject and message.';
                return null;
            }
            
            if(to != '' || additionalTo != '' || cc != '' || bcc != ''){
                List<String> toAddresses = new List<String>();
                List<String> ccAddresses = new List<String>();
                List<String> bccAddresses = new List<String>();
        
                List<String> tmpAddr = new List<String>();
                if(additionalTo.contains(DEL)){
                    toAddresses = additionalTo.split(DEL);
                    for(String tmp:toAddresses){
                        tmpAddr.add(tmp);
                    }
                }else if(additionalTo != '') {
                    toAddresses.add(additionalTo);
                    tmpAddr.add(additionalTo);
                }
                
                if(to != ''){
                    final String emailAddr = getEmailByUserName(to);
                    toAddresses.add(emailAddr);
                    tmpAddr.add(emailAddr);
                }
                
                if(cc.contains(DEL)){
                    ccAddresses = cc.split(DEL);
                    for(String tmp:ccAddresses){
                        tmpAddr.add(tmp);
                    }
                }else if(cc != ''){
                    ccAddresses.add(cc);
                    tmpAddr.add(cc);
                }
                if(bcc.contains(DEL)){
                    bccAddresses = bcc.split(DEL);
                    for(String tmp:bccAddresses){
                        tmpAddr.add(tmp);
                    }
                }else if(bcc != ''){
                    bccAddresses.add(bcc);
                    tmpAddr.add(bcc);
                }
        
                /* Checking whether mail ids are valid */
                addresses = tmpAddr;
                for(String tempStr:addresses){
                    if(!Pattern.matches('[a-zA-Z0-9._-]+@[a-zA-Z]+.[a-zA-Z]{2,4}', tempStr)){
                        errorMsg = 'Check To, CC and BCC addresses';
                        successMsg = '';
                        flagToSendMail = false;      
                        break;          
                    }else{
                        flagToSendMail = true;
                    }           
                } 
        
                /* Sending Mail */
                if(flagToSendMail == true){
                    Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
                    if(toAddresses != null){
                        email.setToAddresses(toAddresses);
                    }
                    if(ccAddresses != null){
                        email.setccAddresses(ccAddresses);
                    }
                    if(bccAddresses != null){
                        email.setbccAddresses(bccAddresses);
                    }             
                    email.setSubject(subject);  
                    email.setHtmlBody(message);
                    
                    List<Messaging.EmailFileAttachment> attachs = null;
                    
                    if('' != attachmentIds){
                        final String[] attachIds = attachmentIds.split(DEL);
                        if(null != attachIds && attachIds.size() > 0){
                           final List<Attachment> attechments = getAttachmentsByIds(attachIds);
                            if(null != attechments && attechments.size() > 0){
                                attachs = new List<Messaging.EmailFileAttachment>();
                                Messaging.EmailFileAttachment attach = null;
                                for(Attachment att: attechments){
                                    attach = new Messaging.EmailFileAttachment();
                                    attach.setContentType(att.contentType);
                                    attach.setFileName(att.Name);
                                    attach.setInline(false);
                                    attach.setBody(att.Body);
                                    attachs.add(attach);
                                    attach = null;
                                }
                            }                        
                        }
                    }
             
                    if(null != attachs && attachs.size() > 0){
                        email.setFileAttachments(attachs);
                    }
                                    
                    Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
        
                    errorMsg = '';
                    successMsg = 'Mail sent successfully to following recipients';
                    return pageRef; 
                }else{
                    return null;
                }
            }else{
                errorMsg = 'Please enter To or CC or BCC address';
                return null;
            }
        }
    
    }